Je dois pouvoir analyser XML à l'aide de JavaScript. Le XML sera dans une variable. Je préférerais ne pas utiliser jQuery ou d'autres frameworks.
J'ai regardé ceci, XML> lecture jQuery .
D'après votre dernière question , posée 20 minutes avant celle-ci, vous essayez d'analyser (lire et convertir) le code XML trouvé à l'aide de FindNearestAddress de GeoNames.
Si votre XML est dans une variable de chaîne appelée txt
et ressemble à ceci:
<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>
Ensuite, vous pouvez analyser le XML avec Javascript DOM comme ceci:
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);
}
Et obtenez des valeurs spécifiques des nœuds comme ceci:
//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;
En réponse aux préoccupations de @ gaugeinvariante concernant le xml avec les préfixes d'espace de noms. Si vous avez besoin d'analyser XML avec les préfixes d'espace de noms, tout devrait fonctionner de manière presque identique:
REMARQUE: cela ne fonctionne que dans les navigateurs prenant en charge les préfixes d'espace de noms xml tels que 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);
Ce qui suit va analyser une chaîne XML dans un document XML dans tous les principaux navigateurs, y compris Internet Explorer 6. Une fois que vous avez cela, vous pouvez utiliser les méthodes/propriétés de traversée DOM habituelles telles que childNodes et getElementsByTagName () pour obtenir les nœuds souhaités.
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");
}
Exemple d'utilisation:
var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
Ce que j'ai obtenu de https://stackoverflow.com/a/8412989/1232175 .