C++ 在遍历boost::property_树时获取节点的完整xml

C++ 在遍历boost::property_树时获取节点的完整xml,c++,xml,boost,C++,Xml,Boost,在使用boost\u FOREACH进行迭代时,获取boost::property\u树的完整xml文本时遇到问题 Xml文件如下所示: <foo> <bar param1="val1" param2="val2"> <one>some text</one> <two>some text</two> </bar> <bar param1="val3"

在使用boost\u FOREACH进行迭代时,获取boost::property\u树的完整xml文本时遇到问题

Xml文件如下所示:

<foo>
    <bar param1="val1" param2="val2">
        <one>some text</one>
        <two>some text</two>
    </bar>
    <bar param1="val3" param2="val4">
        <one>some text</one>
        <two>some text</two>
    </bar>
</foo>

一些文本
一些文本
一些文本
一些文本
下面是我用来迭代的代码:

ptree pt;
read_xml(input_stream, pt);
BOOST_FOREACH(ptree::value_type const& bar, pt.get_child("foo")) 
{
     std::ostringstream oss;
     write_xml(oss, bar.second);
     std::cout << oss.str();
}
ptree-pt;
读取xml(输入流,pt);
BOOST\u FOREACH(ptree::value\u type const&bar,pt.get\u child(“foo”))
{
std::ostringstream oss;
编写xml(oss,bar.second);

很遗憾,如果不简单地将子树序列化为流,我会说这是不可能的。如果你让代码成为SSCCE,我本来可以为你做的。现在,这将需要很多时间(5分钟的样本运行时间超过了展示概念证明所需的时间)@sehe,我添加了可以简单复制的代码&pasted@Apokal似乎有效,但我非常怀疑这是否是最好的方法。希望在你得到真正的答案之前有所帮助。@cv_和__他正是我要做的,因为ptree不是xml库。否则,我会切换到libxml2或pugixml(cv_和_he,sehe非常感谢,你的解决方案非常简单!所以,请有人发布一个答案,这样我就可以接受了,因为我认为不会很快有答案。
<?xml version="1.0" encoding="utf-8"?>
<one>some text</one>
<two>some text</two>
<?xml version="1.0" encoding="utf-8"?>
<bar param1="val1" param2="val2">
    <one>some text</one>
    <two>some text</two>
</bar>
#include <sstream>
#include <iostream>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/foreach.hpp>

const std::string xml_str =
        "<foo>"
            "<bar param1=\"val1\" param2=\"val2\">"
                "<one>some text</one>"
                "<two>some text</two>"
            "</bar>"
            "<bar param1=\"val3\" param2=\"val4\">"
                "<one>more text</one>"
                "<two>more text</two>"
            "</bar>"
        "</foo>";

int main()
{
    using namespace boost::property_tree;
    using namespace boost::property_tree::xml_parser;

    std::istringstream iss(xml_str);
    ptree pt;
    read_xml(iss, pt);

    BOOST_FOREACH(ptree::value_type const& bar, pt.get_child("foo")) 
    {
         std::ostringstream oss;
         write_xml(oss, bar.second);
         std::cout << oss.str() << std::endl;
    }

    return 0;
}