responseXML возвращает ноль. Я пытаюсь извлечь данные из XML-файла и разместить его на сайте (пример из w3schools) - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь извлечь данные из файла XML и разместить их на сайте (пример из w3schools).Дело в том, что я работаю локально, то есть я не лезу в другой домен.Может я что то не так делаю.Возможно, потребуется указать заголовки Http.Итак, поскольку я новичок в программировании, я не очень хорошо знаком с основами программирования.

Я попытался обернуть ответ из xml в текст.Я запустил браузер с расширенными функциями.

    //THIS = XML, date = 06.05.2019 (in myFunction come null from 
    //responseXML)

    let xhttp = new XMLHttpRequest();
    function loadDoc() {
      xhttp.open("GET", "xmls/"+date+".xml", true);
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myFunction(this);
        }
      };
          xhttp.send();
      }




    function myFunction(xml) {
      var i;
      //xmlDoc = new DOMParser().parseFromString(xhttp.responseXML, 'text/xml');
      var xmlDoc = xml.responseXML;
      console.log(xml);
      var table="<tr><th>name</th><th>value</th></tr>"; 
      var x = xmlDoc.getElementsByTagName("Valute");

      for (i = 0; i <x.length; i++) {
        table += "<tr><td>" +
        x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue +
          "</td><td>" +
        x[i].getElementsByTagName("Value")[0].childNodes[0].nodeValue +
          "</td></tr>";
      }
      document.getElementById("demo").innerHTML = table;
      }

Я ожидаю, что responseXML не будет нулевым

1 Ответ

0 голосов
/ 06 мая 2019

Редактировать:

Хорошо, так что это не запрос.Это недопустимый XMl.

XML-файлы по умолчанию могут иметь только один корневой элемент, где ваш образец XML содержит несколько тегов <Valute> друг за другом и не имеет схемы для проверки этого.Поэтому, если вы оберните эти <Valute> внутри отдельного корневого тега, у меня все будет работать:

<?xml version="1.0"?>
<Valutes>
    <Valute>
        <Name>USD</Name>
        <Value>1.7</Value>
    </Valute>
    <Valute>
        <Name>EURO</Name>
        <Value>1.9026</Value>
    </Valute>
    <Valute>
        <Name>Australia</Name>
        <Value>1.1884</Value>
    </Valute>
    <Valute>
        <Name>Argentina</Name>
        <Value>0.0382</Value>
    </Valute>
    <Valute>
        <Name>Belorus</Name>
        <Value>0.8046</Value>
    </Valute>
</Valutes>

Затем запрос проанализирует файл .xml в XML-документе без каких-либо изменений для остальных.кода.Поэтому, когда я console.log () xhttp.responseXML, я получаю [object XMLDocument] и его содержимое.

Для проверки я использовал следующий код, файл xmltest.xml, содержащий приведенный выше XML.

var xhttp = new XMLHttpRequest();
xhttp.open( 'GET', 'http://www.someserver.com/resources/xmltest.xml', true );
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        alert( 'got response' );
        console.log( xhttp.responseXML );
    }
};
xhttp.send();

PS: типы MIME по-прежнему должны быть корректными как на клиенте, так и на сервере.Но XML должен поддерживаться изначально.

PPS: Мой PS в предыдущем ответе все еще действителен.Я получаю лучшие результаты, анализируя XML в JSON на сервере и не заботясь о XML на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...