I’m guessing from your last question, asked 20 minutes before this one, that you are trying to parse (read and convert) the XML found through using GeoNames’ FindNearestAddress.
If your XML is in a string variable called txt
and looks like this:
<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>
Then you can parse the XML with Javascript DOM like this:
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); }
And get specific values from the nodes like this:
//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;
Feb. 2019 edit:
In response to @gaugeinvariante’s concerns about xml with Namespace prefixes. Should you have a need to parse xml with Namespace prefixes, everything should work almost identically:
NOTE: this will only work in browsers that support xml namespace prefixes such as Microsoft Edge
// XML with namespace prefixes 's', 'sn', and 'p' in a variable called txt txt = ` <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:postalcode>94025</p:postalcode> </address>`; //Everything else the same 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); } //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 name console.log(xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue); //Gets Postal Code console.log(xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue);