JavaScript 中变量字符串的 XML 解析
2022-08-30 01:13:01
我有一个包含格式良好且有效的 XML 的变量字符串。我需要使用JavaScript代码来解析这个提要。
如何使用(与浏览器兼容的)JavaScript代码来完成此操作?
我有一个包含格式良好且有效的 XML 的变量字符串。我需要使用JavaScript代码来解析这个提要。
如何使用(与浏览器兼容的)JavaScript代码来完成此操作?
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 遍历方法/属性,如 和 来获取你想要的节点。Document
parseXml
childNodes
getElementsByTagName()
用法示例:
var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
如果您使用的是jQuery,则可以从版本1.5开始使用其内置的parseXML()
方法,该方法在功能上与上面的函数相同。
var xml = $.parseXML("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
更新:有关更正确的答案,请参阅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会下来,并且它会测试一切是否按预期解析。