Цикл XML собирает слишком много элементов в массиве - PullRequest
0 голосов
/ 15 августа 2011

Привет, ребята, у меня проблемы с циклом через какой-то XML.Я пытаюсь захватить элементы и использовать их в качестве переменных js.Мой 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;

Есть ли другой способ достичь того, что я пытаюсь сделать здесь?

1 Ответ

1 голос
/ 15 августа 2011

Как на счет этого

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);
}
...