读取变量号的子节点?

时间:2016-11-23 11:04:27

标签: javascript xml

我正在开发一个Web UI,它使用生成以下XML文件的Web服务:

<datas>
  <order>
    <order_ref>...</order_ref>
    <order_time>...</order_time>
    <products>
        <product>
          <sku>...</sku>
          <quantity>...</quantity>
          <price>...</price>
          <title>...</title>
        </product>
        <product>
          <sku>...</sku>
          <quantity>...</quantity>
          <price>...</price>
          <title>...</title>
        </product>
    </products>
  </order>
  <order>...</order>
  <order>...</order>
  <order>...</order>
  <order>...</order>
</datas>

正如您所看到的,我有一个XML文件,其中包含多个订单,可以是可变数量的订单,以及每个订单中的数量也可变的产品。 (例如,订单1有3个产品,订单2有1个产品等)。

我想阅读按特定顺序排列的产品的属性。

我试过这个,但它从所有订单中返回产品。

//var orders = xmlDoc.getElementsByTagName("order");

var products = xmlDoc.getElementsByTagName("product");
for (prodIndex = 0; prodIndex  < products.length; prodIndex++) {
    document.getElementById("data"+n).innerHTML = xmlDoc.getElementsByTagName('sku')[prodIndex].childNodes[0].nodeValue;
        n++;

}

如何获得订单[x]中的产品?

1 个答案:

答案 0 :(得分:0)

你只需要深入了解元素&#34;通过树&#34;到订单元素。在每个订单中找到产品:

orders = xmlDoc.getElementsByTagName("order");

for (i = 0; i < orders.length ;i++) {
  txt += orders[i].nodeName + ": <br>";

  prod = orders[i].getElementsByTagName("products"); 
  prods = prod[0].getElementsByTagName("product");

  for (j = 0; j < prods.length; j++){
    txt += prods[j].nodeName + "<br>";

  }

  txt += "<br>";
}

此外,您应该检查元素是否存在或代码是否有效。

缩短代码

整个例外:http://www.w3schools.com/code/tryit.asp?filename=FA3A1AU4NB57

orders = xmlDoc.getElementsByTagName("order");
for (i = 0; i < orders.length ;i++) {

  prods = orders[i].getElementsByTagName("products")[0].getElementsByTagName("product");

  for (j = 0; j < prods.length; j++){

    //here is Your product in prods[j] for one order "orders[i]"

  }
}