js 把xml与json互相转化

秒速五厘米 2022-09-23 13:59 252阅读 0赞

function paymentAll() {
var orderid = [];
var olist=[];
var orderchecked = $(‘input[name=”paycheck”]:checked’);
orderchecked.each(function (i, d) {
var l = $(d).parent().siblings().find(‘:checked’);
var Lp = new Array();
l.each(function (li, ld) {
Lp[li] = $(ld).data(‘proid’);
})
var pd = { “DetailID”: Lp };
var OrderList = { “OrderID”: $(d).data(‘orderid’), “Detail”: pd };
olist.push(OrderList);
})
var ol = { “Order”: olist }
var ful = { “OrderList”: ol }
alert(json2xml(ful));
//if ($(‘input[name=”paycheck”]:checked’).length > 0) {
// $(‘#divallpay’).show();
//}
//location.href = window.basePath + “/business/mall/orderpay.aspx?” + baseParam + “&orderidlist=” + orderid;
}

js文件如下

  1. function json2xml(o, tab) {
  2. var toXml = function (v, name, ind) {
  3. var xml = "";
  4. if (v instanceof Array) {
  5. for (var i = 0, n = v.length; i < n; i++)
  6. xml += ind + toXml(v[i], name, ind + "\t") + "\n";
  7. }
  8. else if (typeof (v) == "object") {
  9. var hasChild = false;
  10. xml += ind + "<" + name;
  11. for (var m in v) {
  12. if (m.charAt(0) == "@")
  13. xml += " " + m.substr(1) + "=\"" + v[m].toString() + "\"";
  14. else
  15. hasChild = true;
  16. }
  17. xml += hasChild ? ">" : "/>";
  18. if (hasChild) {
  19. for (var m in v) {
  20. if (m == "#text")
  21. xml += v[m];
  22. else if (m == "#cdata")
  23. xml += "<![CDATA[" + v[m] + "]]>";
  24. else if (m.charAt(0) != "@")
  25. xml += toXml(v[m], m, ind + "\t");
  26. }
  27. xml += (xml.charAt(xml.length - 1) == "\n" ? ind : "") + "</" + name + ">";
  28. }
  29. }
  30. else {
  31. xml += ind + "<" + name + ">" + v.toString() + "</" + name + ">";
  32. }
  33. return xml;
  34. }, xml = "";
  35. for (var m in o)
  36. xml += toXml(o[m], m, "");
  37. return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, "");
  38. }
  39. function xml2json(xml, tab) {
  40. var X = {
  41. toObj: function (xml) {
  42. var o = {};
  43. if (xml.nodeType == 1) { // element node ..
  44. if (xml.attributes.length) // element with attributes ..
  45. for (var i = 0; i < xml.attributes.length; i++)
  46. o["@" + xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue || "").toString();
  47. if (xml.firstChild) { // element has child nodes ..
  48. var textChild = 0, cdataChild = 0, hasElementChild = false;
  49. for (var n = xml.firstChild; n; n = n.nextSibling) {
  50. if (n.nodeType == 1) hasElementChild = true;
  51. else if (n.nodeType == 3 && n.nodeValue.match(/[^ \f\n\r\t\v]/)) textChild++; // non-whitespace text
  52. else if (n.nodeType == 4) cdataChild++; // cdata section node
  53. }
  54. if (hasElementChild) {
  55. if (textChild < 2 && cdataChild < 2) { // structured element with evtl. a single text or/and cdata node ..
  56. X.removeWhite(xml);
  57. for (var n = xml.firstChild; n; n = n.nextSibling) {
  58. if (n.nodeType == 3) // text node
  59. o["#text"] = X.escape(n.nodeValue);
  60. else if (n.nodeType == 4) // cdata node
  61. o["#cdata"] = X.escape(n.nodeValue);
  62. else if (o[n.nodeName]) { // multiple occurence of element ..
  63. if (o[n.nodeName] instanceof Array)
  64. o[n.nodeName][o[n.nodeName].length] = X.toObj(n);
  65. else
  66. o[n.nodeName] = [o[n.nodeName], X.toObj(n)];
  67. }
  68. else // first occurence of element..
  69. o[n.nodeName] = X.toObj(n);
  70. }
  71. }
  72. else { // mixed content
  73. if (!xml.attributes.length)
  74. o = X.escape(X.innerXml(xml));
  75. else
  76. o["#text"] = X.escape(X.innerXml(xml));
  77. }
  78. }
  79. else if (textChild) { // pure text
  80. if (!xml.attributes.length)
  81. o = X.escape(X.innerXml(xml));
  82. else
  83. o["#text"] = X.escape(X.innerXml(xml));
  84. }
  85. else if (cdataChild) { // cdata
  86. if (cdataChild > 1)
  87. o = X.escape(X.innerXml(xml));
  88. else
  89. for (var n = xml.firstChild; n; n = n.nextSibling)
  90. o["#cdata"] = X.escape(n.nodeValue);
  91. }
  92. }
  93. if (!xml.attributes.length && !xml.firstChild) o = null;
  94. }
  95. else if (xml.nodeType == 9) { // document.node
  96. o = X.toObj(xml.documentElement);
  97. }
  98. else
  99. alert("unhandled node type: " + xml.nodeType);
  100. return o;
  101. },
  102. toJson: function (o, name, ind) {
  103. var json = name ? ("\"" + name + "\"") : "";
  104. if (o instanceof Array) {
  105. for (var i = 0, n = o.length; i < n; i++)
  106. o[i] = X.toJson(o[i], "", ind + "\t");
  107. json += (name ? ":[" : "[") + (o.length > 1 ? ("\n" + ind + "\t" + o.join(",\n" + ind + "\t") + "\n" + ind) : o.join("")) + "]";
  108. }
  109. else if (o == null)
  110. json += (name && ":") + "null";
  111. else if (typeof (o) == "object") {
  112. var arr = [];
  113. for (var m in o)
  114. arr[arr.length] = X.toJson(o[m], m, ind + "\t");
  115. json += (name ? ":{" : "{") + (arr.length > 1 ? ("\n" + ind + "\t" + arr.join(",\n" + ind + "\t") + "\n" + ind) : arr.join("")) + "}";
  116. }
  117. else if (typeof (o) == "string")
  118. json += (name && ":") + "\"" + o.toString() + "\"";
  119. else
  120. json += (name && ":") + o.toString();
  121. return json;
  122. },
  123. innerXml: function (node) {
  124. var s = ""
  125. if ("innerHTML" in node)
  126. s = node.innerHTML;
  127. else {
  128. var asXml = function (n) {
  129. var s = "";
  130. if (n.nodeType == 1) {
  131. s += "<" + n.nodeName;
  132. for (var i = 0; i < n.attributes.length; i++)
  133. s += " " + n.attributes[i].nodeName + "=\"" + (n.attributes[i].nodeValue || "").toString() + "\"";
  134. if (n.firstChild) {
  135. s += ">";
  136. for (var c = n.firstChild; c; c = c.nextSibling)
  137. s += asXml(c);
  138. s += "</" + n.nodeName + ">";
  139. }
  140. else
  141. s += "/>";
  142. }
  143. else if (n.nodeType == 3)
  144. s += n.nodeValue;
  145. else if (n.nodeType == 4)
  146. s += "<![CDATA[" + n.nodeValue + "]]>";
  147. return s;
  148. };
  149. for (var c = node.firstChild; c; c = c.nextSibling)
  150. s += asXml(c);
  151. }
  152. return s;
  153. },
  154. escape: function (txt) {
  155. return txt.replace(/[\\]/g, "\\\\")
  156. .replace(/[\"]/g, '\\"')
  157. .replace(/[\n]/g, '\\n')
  158. .replace(/[\r]/g, '\\r');
  159. },
  160. removeWhite: function (e) {
  161. e.normalize();
  162. for (var n = e.firstChild; n;) {
  163. if (n.nodeType == 3) { // text node
  164. if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) { // pure whitespace text node
  165. var nxt = n.nextSibling;
  166. e.removeChild(n);
  167. n = nxt;
  168. }
  169. else
  170. n = n.nextSibling;
  171. }
  172. else if (n.nodeType == 1) { // element node
  173. X.removeWhite(n);
  174. n = n.nextSibling;
  175. }
  176. else // any other node
  177. n = n.nextSibling;
  178. }
  179. return e;
  180. }
  181. };
  182. if (xml.nodeType == 9) // document node
  183. xml = xml.documentElement;
  184. var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, "\t");
  185. return "{\n" + tab + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "\n}";
  186. }

发表评论

表情:
评论列表 (有 0 条评论,252人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java中stringjson互相转化

    在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采用j...