获取一个节点的完整xml,同时迭代boost :: property_tree

时间:2013-12-16 13:27:59

标签: c++ xml boost

在使用BOOST_FOREACH进行迭代时,我在获取boost :: property_tree的完整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();
}

作为输出我收到(对于每个<bar>):

<?xml version="1.0" encoding="utf-8"?>
<one>some text</one>
<two>some text</two>

问题是,如何使用上面的循环接收<bar>标签的完整xml文本? 例如:

<?xml version="1.0" encoding="utf-8"?>
<bar param1="val1" param2="val2">
    <one>some text</one>
    <two>some text</two>
</bar>

提前致谢!

编辑已添加准备复制&amp;过去的一段代码

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

0 个答案:

没有答案