选择XML AJAX文档作为变量

时间:2016-12-20 09:13:02

标签: javascript jquery html xml

在HTML文档中,我要求使用外部JavaScript代码(HMTL中的<script src="...">),该代码使用AJAX加载外部.xml文件:

暂不分析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" 元素的内容更改为第一个(.nodeValue)([0])XML中的<price>元素

  3. 预期结果是&#34; 94 600&#34;,对吗?这就是它的回报。到目前为止没有错误。

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

    我所做的最接近的解决方案基本上是myFunction(xml)的第三个动作:

    1. 定义&#34;示例&#34;变量,指的是HTML中<{1}} <price>元素的值
    2. 在警告框中显示变量&#34;示例&#34;的值,只是为了查看它是否正常工作。
    3. 关于第三项操作,问题是它在HTML 中而不是在XML中查找<product code="DVR4H1004N1P"> 的值。我的困难是我无法弄清楚如何在JavaScript中的变量声明中访问/选择XML文档

      可能&#34;解决方案&#34;

      例如,我没有使用<price>而是指向文档,而是指向具有XML文档的变量(又名&#34; xmlDoc&#34;),如document.querySelectorAll('product[code="DVR4H1004N1P"]')[0].getElementsByTagName("price")[0].innerHTML;

      但它不起作用。如果您需要额外的信息,请不要犹豫,在评论中提问!

1 个答案:

答案 0 :(得分:1)

你可以这样做,也许:

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">