选择XML AJAX文档作为变量



在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)解释(现在按我解释):

  1. 获取XML文档

  2. 在html 中使用 id="demo2" 更改元素的内容,为> first value (.nodevalue)的内容。0]) <price>元素在xml 中。

预期的结果是" 94 600",对吗?这就是它的返回。到目前为止还没有错误。

但这不是我真正想要的,我实际上想将HTML 中的id="demo2" 的内容更改为xml <product code="DVR4H1004N1P"> 内的<price>元素的值。这应该返回相同的值" 94 600"。不要问,我只需要这样做

我完成的最接近的解决方案本质上是myFunction(xml)的第三个动作:

  1. 定义了一个"示例"变量,该变量指的是html 中的 <product code="DVR4H1004N1P"> 中的 <price>元素的值。
  2. 在警报框中显示变量"示例"的值,只是为了查看它是否有效。👌

关于第三个动作,问题在于它在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">

最新更新