2016-11-23 2 views
1

Я developping веб-интерфейс, который использует веб-сервиса, который генерирует следующий XML-файл:Прочитать дочерние узлы переменного числа?

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

Дополнительно Вы должны проверить, существует ли элемент или код не работает.

Сокращенный код

Всего напр .: 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

Спасибо! Это очень помогло. Я связал код, чтобы выбрать конкретный атрибут [здесь] (http://www.w3schools.com/code/tryit.asp?filename=FA3D16RLJEA9) –

Смежные вопросы