我正在尝试从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不会为空
答案 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,我得到了更好的结果。