首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个节点上的Boost ptree迭代

两个节点上的Boost ptree迭代
EN

Stack Overflow用户
提问于 2013-03-22 13:26:21
回答 1查看 3K关注 0票数 2

我有一个这样的xml

代码语言:javascript
复制
<examples>
<example>
<test name="img">testme</test>
<test name="img1">testme1</test>
<test name="img1">testme2</test>
</example>
<example>
<test name="text">testme</test>
<test name="text">testme1</test>
<test name="text">testme2</test>
</example>
</examples>

我尝试了这段代码,它只提取第一个示例节点

代码语言:javascript
复制
ptree ptree;
        read_xml(doc_path, ptree);

        BOOST_FOREACH(ptree::value_type & value, ptree.get_child("examples.example")){
           cout<<value.second.get("<xmlattr>.name", "")<<endl;
           cout<<value.second.data()<<endl;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-22 15:15:57

ptree.equal_range方法具有您正在寻找的行为。注意,我有几段C++11代码--你需要一个现代的编译器。

代码语言:javascript
复制
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <sstream>

const char xml[] = R"(<examples>
<example>
<test name="img">testme</test>
<test name="img1">testme1</test>
<test name="img1">testme2</test>
</example>
<example>
<test name="text">testme</test>
<test name="text">testme1</test>
<test name="text">testme2</test>
</example>
</examples>)";


int main(int argc, char **argv)
{

    boost::property_tree::ptree ptree;
    std::istringstream xml_str(xml);
    read_xml(xml_str, ptree);

    auto example_range = ptree.get_child("examples").equal_range("example");

    for( auto it = example_range.first; it != example_range.second; ++it )
    {
        auto test_range = it->second.equal_range("test");
        for( auto test_it = test_range.first; test_it != test_range.second; ++test_it )
        {
            std::cout << test_it->second.get("<xmlattr>.name","") <<std::endl;
            std::cout << test_it->second.data() << std::endl;
        }
    }

    return 0;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15563317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档