Parse XML using JavaScript [duplicate]

To pytanie ma już odpowiedź tutaj:

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 .

Author: hjpotter92, 2013-07-12

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;

JSFiddle

 135
Author: Enigmadan,
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 .

 13
Author: faino,
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