2011-08-15 55 views
0

嗨,我在循環瀏覽某些XML時遇到了問題。我試圖捕獲元素並將它們用作js變量。我的XML是。XML循環在陣列中收集太多元素

<box> 
<thing> 
      <id>5</id> 
      <numbers> 
       <number>4</number> 
       <number>6</number> 
      </numbers> 
</thing> 
<thing> 
      <id>2</id> 
      <numbers> 
       <number>8</number> 
       <number>5</number> 
       <number>9</number>    
      </numbers> 
</thing> 
<thing> 
      <id>88</id> 
      <numbers> 
       <number>78</number> 
      </numbers> 
</thing> 
</box> 

我的JS。

ajax(site, params) 

var things = xmlDoc.getElementsByTagName("thing"); 

for (i=0; i<things.length; i++){ 
    var id = things[i].getElementsByTagName("id")[0].firstChild.nodeValue; 
    var numbers = things[i].getElementsByTagName("numbers"); 
    var value; 
    for (n=0; n<numbers.length; n++){ 
     var number = numbers[n].getElementsByTagName("number"); 
     value = value + number; 
    } 

    id = value; 
} 

我遇到的問題是,當我抓住元素,它似乎抓住整個頁面的所有元素。

,並增加了他們的價值,所以我結束了

id #1 = 110; 
id #2 = 100; 
id #3 = 78; 

是否有另一種方式來實現什麼,我想在這裏做什麼?

+0

你爲什麼覆蓋與總結「數字」的'id'變量在每個循環的結束?代碼顯示或記錄值的位置在哪裏? – Phil

+0

對不起菲爾我的壞這不是它打算打印類型的問題。晚了!! – Christopher

回答

1

如何像這樣

for (var i = 0; i < things.length; i++) { 
    var thing = things[i]; 
    var id = thing.getElementsByTagName('id')[0].firstChild.nodeValue; 
    var numbers = thing.getElementsByTagName('number'); 
    for (var j = 0, value = 0; j < numbers.length; j++) { 
     value += numbers[j].firstChild.nodeValue; 
    } 
    console.log(id, value); 
}