使用JavaScript解析XML
我需要能够使用JavaScript解析XML。 XML将在一个变量中。我不想使用jQuery或其他框架。使用JavaScript解析XML
我看了这个,XML > jQuery reading。
我从你的last question猜测,在这个问题发生前20分钟,你试图解析(读取和转换)通过使用GeoNames的FindNearestAddress找到的XML。
如果你的XML是在一个名为txt
一个字符串变量,看起来像这样:
<address>
<street>Roble Ave</street>
<mtfcc>S1400</mtfcc>
<streetNumber>649</streetNumber>
<lat>37.45127</lat>
<lng>-122.18032</lng>
<distance>0.04</distance>
<postalcode>94025</postalcode>
<placename>Menlo Park</placename>
<adminCode2>081</adminCode2>
<adminName2>San Mateo</adminName2>
<adminCode1>CA</adminCode1>
<adminName1>California</adminName1>
<countryCode>US</countryCode>
</address>
然后你就可以用JavaScript DOM解析XML是这样的:
if (window.DOMParser)
{
parser = new DOMParser();
xmlDoc = parser.parseFromString(txt, "text/xml");
}
else // Internet Explorer
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(txt);
}
,并从特定的值像这样的节点:
//Gets house address number
xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodeValue;
//Gets Street name
xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue;
//Gets Postal Code
xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue;
请注意,您可以使用jquery快速访问值,如$(xmlDoc).find('street:eq(0):eq(0)')。html()'而不是'xmlDoc.getElementsByTagName(“streetNumber “)[0] .childNodes [0] .nodeValue;' –
非常有帮助Enigmadan谢谢! – Andrew
查找和整合OP的其他问题的答案就是我所说的高级SO游戏。我印象深刻,做得好! – maryisdead
以下将在所有主流浏览器(包括Internet Explorer 6)中将XML字符串解析为XML文档。一旦拥有了这些,就可以使用常用的DOM遍历方法/属性(如childNodes和getElementsByTagName())来获取你想要的节点。
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");
}
用法示例:
var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
我可能会使用PhoneGap来打包应用程序,我不知道这是否可行。 – user2574350