Почему этот цикл работает только один раз? - PullRequest
3 голосов
/ 10 октября 2010

Почему этот цикл работает только один раз?noteDatabaseItem просто берет узел и заполняет данные.XML содержит 3 примечания.

XML:

<?xml version="1.0" encoding="utf-8"?>
<noteCollection>
  <note name="Test Note 1">This is test note 1 content!</note>
  <note name="Test Note 2">This is test note 2 content!</note>
  <note name="Test Note 3">This is test note 3 content!</note>
</noteCollection>

C ++:

std::vector<notekeeper::noteDatabaseItem> noteList;
TiXmlElement* noteCollection = xmlDoc->FirstChildElement("noteCollection");
TiXmlElement* node = noteCollection->FirstChildElement("note");
int itemCount = 0;

while (node != NULL) {
    itemCount++;
    noteList.resize(itemCount);
    noteList.push_back(noteDatabaseItem(node));
    node = noteCollection->NextSiblingElement("note");
}

Ответы [ 3 ]

9 голосов
/ 10 октября 2010

Разве это не должно быть node = node->NextSiblingElement("note")?

noteCollection имеет только детей, а не братьев и сестер, верно?

3 голосов
/ 10 октября 2010

Вы получаете не тот элемент в вашем цикле.Попробуйте это:

while (node != NULL) {
    itemCount++;
    noteList.push_back(noteDatabaseItem(node));
    node = node->NextSiblingElement("note");
}

Следующий брат текущего узла - тот, который вам нужен.Вы пытались получить следующий брат родительского узла.

1 голос
/ 10 октября 2010
node = noteCollection->NextSiblingElement("note");

должно быть

node = node->NextSiblingElement("note");

Глупая ошибка. Брат, а не ребенок.

...