2016-11-23 64 views
1

我深化发展,它使用的是生成以下XML文件中的Web服务在Web UI:读取可变数字的子节点?

<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]中的产品?

+0

遍历订单,然后调用特定的顺序节点上的getElementsByTagName来获得它下面的产品。 – CBroe

回答

0

你只需要深入元素“穿过树”到订单元素。在每个订单然后找到产品:

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

此外,您应该检查元素是否存在或代码将无法正常工作。

缩短代码

全EX: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]" 

    } 
} 
+0

谢谢!这非常有帮助。 我链接了代码以选择特定属性 [here](http://www.w3schools.com/code/tryit.asp?filename=FA3D16RLJEA9) –