2016-11-23 68 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) –