XML到JavaScript对象

前端之家收集整理的这篇文章主要介绍了XML到JavaScript对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一个解析XML字符串并将其转换为JavaScript对象的JavaScript库。什么是好的?
解析XML并返回一个与对应于xml的方案的JavaScript对象。具有相同名称的xml兄弟姐妹被折叠成数组。在arrayTags参数(标签名称字符串的数组)中可以找到具有名称的节点,即使在发生只有一个标签的情况下也总是使用数组。 arrayTags可以省略。只有空格的文本节点被丢弃。使用console.log(parseXml(myxml))来浏览输出
  1. parseXml(xml,arrayTags)
  2. {
  3. var dom = null;
  4. if (window.DOMParser)
  5. {
  6. dom = (new DOMParser()).parseFromString(xml,"text/xml");
  7. }
  8. else if (window.ActiveXObject)
  9. {
  10. dom = new ActiveXObject('Microsoft.XMLDOM');
  11. dom.async = false;
  12. if (!dom.loadXML(xml))
  13. {
  14. throw dom.parseError.reason + " " + dom.parseError.srcText;
  15. }
  16. }
  17. else
  18. {
  19. throw "cannot parse xml string!";
  20. }
  21.  
  22. function isArray(o)
  23. {
  24. return Object.prototype.toString.apply(o) === '[object Array]';
  25. }
  26.  
  27. function parseNode(xmlNode,result)
  28. {
  29. if(xmlNode.nodeName == "#text" && xmlNode.nodeValue.trim() == "")
  30. {
  31. return;
  32. }
  33.  
  34. var jsonNode = {};
  35. var existing = result[xmlNode.nodeName];
  36. if(existing)
  37. {
  38. if(!isArray(existing))
  39. {
  40. result[xmlNode.nodeName] = [existing,jsonNode];
  41. }
  42. else
  43. {
  44. result[xmlNode.nodeName].push(jsonNode);
  45. }
  46. }
  47. else
  48. {
  49. if(arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1)
  50. {
  51. result[xmlNode.nodeName] = [jsonNode];
  52. }
  53. else
  54. {
  55. result[xmlNode.nodeName] = jsonNode;
  56. }
  57. }
  58.  
  59. if(xmlNode.attributes)
  60. {
  61. var length = xmlNode.attributes.length;
  62. for(var i = 0; i < length; i++)
  63. {
  64. var attribute = xmlNode.attributes[i];
  65. jsonNode[attribute.nodeName] = attribute.nodeValue;
  66. }
  67. }
  68.  
  69. var length = xmlNode.childNodes.length;
  70. for(var i = 0; i < length; i++)
  71. {
  72. parseNode(xmlNode.childNodes[i],jsonNode);
  73. }
  74. }
  75.  
  76. var result = {};
  77. if(dom.childNodes.length)
  78. {
  79. parseNode(dom.childNodes[0],result);
  80. }
  81.  
  82. return result;
  83. }

猜你在找的XML相关文章