从这个问题的20分钟前的最后一个问题中longitude-to-address),我猜测您正在尝试解析(读取和转换)通过使用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> <postalpre>94025</postalpre> <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 numberxmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodevalue;//Gets Street namexmlDoc.getElementsByTagName("street")[0].childNodes[0].nodevalue;//Gets Postal CodexmlDoc.getElementsByTagName("postalpre")[0].childNodes[0].nodevalue;2019年2月编辑:
为了回应@gaugeinvariante对带命名空间前缀的xml的担忧。如果您需要使用命名空间前缀来解析xml,则所有内容应该几乎相同:
注意:这仅在支持xml名称空间前缀的浏览器(例如Microsoft Edge)中有效
// XML with namespace prefixes 's', 'sn', and 'p' in a variable called txttxt = `<address xmlns:p='example.com/postal' xmlns:s='example.com/street' xmlns:sn='example.com/streetNum'> <s:street>Roble Ave</s:street> <sn:streetNumber>649</sn:streetNumber> <p:postalpre>94025</p:postalpre></address>`;//Everything else the sameif (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);}//The prefix should not be included when you request the xml namespace//Gets "streetNumber" (note there is no prefix of "sn"console.log(xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodevalue);//Gets Street nameconsole.log(xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodevalue);//Gets Postal Codeconsole.log(xmlDoc.getElementsByTagName("postalpre")[0].childNodes[0].nodevalue);


