2013-07-11 137 views

回答

123

我從你的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

12

以下將在所有主流瀏覽器(包括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://stackoverflow.com/a/8412989/1232175了。