JavaScript 中变量字符串的 XML 解析

2022-08-30 01:13:01

我有一个包含格式良好且有效的 XML 的变量字符串。我需要使用JavaScript代码来解析这个提要。

如何使用(与浏览器兼容的)JavaScript代码来完成此操作?


答案 1

2017 年更新的答案

下面将 XML 字符串解析为所有主要浏览器中的 XML 文档。除非您需要支持IE < = 8或某些晦涩难懂的浏览器,否则可以使用以下功能:

function parseXml(xmlStr) {
   return new window.DOMParser().parseFromString(xmlStr, "text/xml");
}

如果需要支持 IE <= 8,则以下操作将完成这项工作:

var parseXml;

if (typeof window.DOMParser != "undefined") {
    parseXml = function(xmlStr) {
        return new window.DOMParser().parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" &&
       new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    throw new Error("No XML parser found");
}

一旦你获得了 via,你可以使用通常的 DOM 遍历方法/属性,如 和 来获取你想要的节点。DocumentparseXmlchildNodesgetElementsByTagName()

用法示例:

var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);

如果您使用的是jQuery,则可以从版本1.5开始使用其内置的parseXML()方法,该方法在功能上与上面的函数相同。

var xml = $.parseXML("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);

答案 2

更新:有关更正确的答案,请参阅Tim Down的答案

Internet Explorer和例如基于Mozilla的浏览器公开了不同的对象进行XML解析,因此使用像jQuery这样的JavaScript框架来处理跨浏览器的差异是明智的。

一个非常基本的例子是:

var xml = "<music><album>Beethoven</album></music>";

var result = $(xml).find("album").text();

注:如评论中所指出的;jQuery并没有真正做任何XML解析,它依赖于DOM innerHTML方法,并且会像任何HTML一样解析它,所以在XML中使用HTML元素名称时要小心。但我认为它对于简单的XML“解析”来说相当不错,但是对于密集或“动态”的XML解析,你可能不建议使用它,因为你不会预先发现什么XML会下来,并且它会测试一切是否按预期解析。