gpt4 book ai didi

c++ - 在两个节点上 boost ptree 迭代

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:39 25 4
gpt4 key购买 nike

我有一个这样的xml

<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>

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

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;

最佳答案

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

#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;
}

关于c++ - 在两个节点上 boost ptree 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com