Parse XML using JavaScript [duplicate]
To pytanie ma już odpowiedź tutaj:
- Cross-Browser JavaScript XML Parsing [closed] 3 odpowiedzi
Muszę być w stanie parsować XML za pomocą JavaScript. XML będzie w zmiennej. Wolałbym nie używać jQuery ani innych frameworków.
Spojrzałem na to, XML > jQuery reading .
2 answers
Zgaduję z twojego ostatniego pytania, zadanego 20 minut przed tym, że próbujesz przeanalizować (odczytać i przekonwertować) XML znaleziony za pomocą FindNearestAddress GeoNames.
Jeśli twój XML znajduje się w zmiennej łańcuchowej o nazwie txt
i wygląda tak:
<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>
Następnie możesz przeanalizować XML za pomocą JavaScript DOM w następujący sposób:
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);
}
I uzyskaj określone wartości z węzłów w następujący sposób:
//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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:53
Poniższy tekst przetworzy łańcuch XML do dokumentu XML we wszystkich głównych przeglądarkach, w tym Internet Explorer 6. Gdy już to masz, możesz użyć zwykłych metod/właściwości trawersujących DOM, takich jak childNodes i getElementsByTagName (), aby uzyskać żądane węzły.
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");
}
Przykładowe użycie:
var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
Które dostałem od https://stackoverflow.com/a/8412989/1232175 .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 20:17:07