увеличить свойство дерева - PullRequest
2 голосов
/ 07 сентября 2011

Основываясь на документации повышения здесь:

http://www.boost.org/doc/libs/1_41_0/doc/html/boost_propertytree/container.html

"В узле может быть несколько дочерних элементов с одинаковым значением ключа. Однако эти дочерние элементы не обязательно являются последовательными.Итератор, возвращаемый функцией find, может ссылаться на любой из них, и нет никаких гарантий относительно взаимного расположения других дочерних элементов с одинаковыми именами. "

Пример XML:

<library>
   <book><title>Title_1</title></book>
   <book><title>Title_2</title></book>
   <book><title>Title_3</title></book>
</library>

Пример кода повышения:

ptree pt;
pt.push_back(ptree::value_type("book", ptree("title")))

// This finds the first book and cannot iterate to the second one:
ptree::const_iterator it = pt.find("book");

Итак, зная это, как бы вы взяли все книги и были уверены, что пошлите их все?

1 Ответ

4 голосов
/ 07 сентября 2011

Вы должны использовать функцию equal_range:

std::pair < ptree::const_assoc_iterator, ptree::const_assoc_iterator> bounds = 
    pt.equal_range("book");

for (ptree::const_assoc_iterator it = bounds.first; it != bounds.second ; ++it)
{
    // process *it
}
...