2

基于此处的 boost 文档:

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

因此,知道了这一点,您将如何获得所有书籍并确保全部阅读?

4

1 回答 1

4

您必须使用以下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
}
于 2011-09-06T23:32:46.203 回答