2013-07-11 10 views
62

Ich muss in der Lage sein, XML mit JavaScript zu analysieren. Das XML wird in einer Variablen sein. Ich würde es vorziehen, nicht jQuery oder andere Frameworks zu verwenden.Parse XML mit JavaScript

Ich habe mir das angesehen, XML > jQuery reading.

+0

Ich werde PhoneGap verwenden, um die App zu packen, und ich weiß nicht, ob das funktioniert. – user2574350

Antwort

123

Ich vermute von Ihrem last question, fragte 20 Minuten vor diesem, dass Sie versuchen, das XML zu finden, das durch die Verwendung von GeoNames 'FindNearestAddress gefunden wird, zu lesen und zu konvertieren.

Wenn Ihr XML ist in einem String-Variablen genannt txt und sieht wie folgt aus:

<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> 

Dann können Sie die XML mit Javascript DOM wie folgt analysieren:

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); 
} 

und spezifische Werte Suche von die Knoten wie folgt aus:

//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

Beachten Sie, dass Sie mit jquery schnell auf die Werte zugreifen können, wie '$ (xmlDoc) .find ('street: eq (0): eq (0)'). Html()' anstelle von 'xmlDoc.getElementsByTagName (" streetNumber ") [0] .childNodes [0] .nodeValue;' –

+0

sehr hilfreich Enigmadan danke! – Andrew

+3

Die Antworten von OPs anderen Fragen nachzuschlagen und zu integrieren, nenne ich SO-Spiel auf hohem Niveau. Ich bin beeindruckt, gut gemacht! – maryisdead

12

Im Folgenden wird eine XML-Zeichenfolge in einem XML-Dokument in allen gängigen Browsern analysiert, einschließlich Internet Explorer 6. Sobald Sie dies haben, können Sie die üblichen DOM-Traversalmethoden/-eigenschaften wie childNodes und getElementsByTagName() verwenden Knoten, die Sie möchten.

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"); 
} 

Beispiel Nutzung:

var xml = parseXml("<foo>Stuff</foo>"); 
alert(xml.documentElement.nodeName); 

Was ich von https://stackoverflow.com/a/8412989/1232175 bekam.