使用JavaScript解析XML

使用JavaScript解析XML

问题描述:

我需要能够使用JavaScript解析XML。 XML将在一个变量中。我不想使用jQuery或其他框架。使用JavaScript解析XML

我看了这个,XML > jQuery reading

+0

我可能会使用PhoneGap来打包应用程序,我不知道这是否可行。 – user2574350

我从你的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; 

JSFiddle

+2

请注意,您可以使用jquery快速访问值,如$(xmlDoc).find('street:eq(0):eq(0)')。html()'而不是'xmlDoc.getElementsByTagName(“streetNumber “)[0] .childNodes [0] .nodeValue;' –

+0

非常有帮助Enigmadan谢谢! – Andrew

+3

查找和整合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); 

这是我从https://*.com/a/8412989/1232175了。