Разбор XML с помощью JavaScript [дубликат]


этот вопрос уже есть ответ здесь:

Мне нужно уметь анализировать XML с помощью JavaScript. XML будет находиться в переменной. Я предпочел бы не использовать jQuery или другие фреймворки.

Я посмотрел на это, XML > чтение jQuery.

2 73

2 ответа:

Я догадываюсь от вашего последний вопрос, спросил за 20 минут до этого, что вы пытаетесь разобрать (читать и конвертировать) XML, найденный с помощью Findnearestaddress GeoNames'.

если ваш XML находится в строковой переменной с именем txt и выглядит так:

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

затем вы можете проанализировать XML с помощью Javascript DOM следующим образом:

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

и получить конкретные значения из узлов, как это:

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

ниже приведен анализ XML-строки в XML-документ во всех основных браузерах, включая Internet Explorer 6. После этого вы можете использовать обычные методы/свойства обхода DOM, такие как childNodes и getElementsByTagName (), чтобы получить нужные узлы.

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

пример использования:

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

который я получил от https://stackoverflow.com/a/8412989/1232175.