responseXML返回null。我正在尝试从xml文件提取数据并将其放置在网站上(例如w3schools的示例)

时间:2019-05-06 13:31:23

标签: javascript ajax xml

我正在尝试从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 :(得分:0)

编辑:

好,所以这不是请求。是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,我得到了更好的结果。