在HTML文档中,我呼吁使用AJAX加载外部.xml文件的外部JavaScript代码(<script src="...">
):
尚未分析myFunction(xml)
。我要在下面解释它
var xhttp, xmlDoc, txt, x, i;
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
// Support IE5 and IE6
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "http://sample.com/db.xml", true);
xhttp.send();
function myFunction(xml) {
var xmlDoc = xml.responseXML;
document.getElementById("demo2").innerHTML = xmlDoc.getElementsByTagName("price")[0].childNodes[0].nodeValue;
var EXAMPLE = document.querySelectorAll('product[code="DVR4H1004N1P"]')[0].getElementsByTagName("price")[0].innerHTML; // Test line 1
alert(EXAMPLE); // Test line 2
}
myFunction(xml)
解释(现在按我解释):
获取XML文档
在html 中使用
id="demo2"
更改元素的内容,为> first 的 value (.nodevalue)的内容。0])<price>
元素在xml 中。
预期的结果是" 94 600",对吗?这就是它的返回。到目前为止还没有错误。
但这不是我真正想要的,我实际上想将HTML 中的id="demo2"
的内容更改为xml 中<product code="DVR4H1004N1P">
内的<price>
元素的值。这应该返回相同的值" 94 600"。不要问,我只需要这样做。
我完成的最接近的解决方案本质上是myFunction(xml)
的第三个动作:
- 定义了一个"示例"变量,该变量指的是html 中的
<product code="DVR4H1004N1P">
中的<price>
元素的值。 - 在警报框中显示变量"示例"的值,只是为了查看它是否有效。👌
关于第三个动作,问题在于它在HTML 中寻找<price>
的值,而不是在XML中。我的挣扎是我无法弄清楚如何访问/在JavaScript中的变量声明中访问/选择XML文档。
可能的"解决方案"
例如,我可以不使用document.querySelectorAll('product[code="DVR4H1004N1P"]')[0].getElementsByTagName("price")[0].innerHTML;
,而是指向文档,而是具有XML文档(aka" xmldoc")的变量,例如xmlDoc.querySelectorAll('product[code="DVR4H1004N1P"]')[0].getElementsByTagName("price")[0].innerHTML;
但行不通。如果您需要额外的信息,请随时在评论中询问!
您可以这样做,也许:
var text = '<catalog><product code="DVR4H1004N1P"><title>DVR de 4 Canales Tribrido (AHD, Análogo y Digital, IP)</title><code>DVR4H1004N1P</code><price>94 600</price></product><product code="DVR81008"><title>DVR de 8 Canales (Full D1, 960H)</title><code>DVR81008</code><price>185 000</price></product></catalog>';
var xmlDoc = $.parseXML(text);
var products = $(xmlDoc).find("product");
var price = products.each(function(i, j){
if($(j).attr("code") == "DVR4H1004N1P"){
$("#demo").html(($(j).find("price")[0].innerHTML));
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="demo">