boost :: property_tree传递子树,包括<xmlattr>

时间:2017-02-24 19:24:03

标签: c++ boost ptree

我正在尝试将boost :: property_tree :: ptree的元素传递给函数。 详细地说,我必须遵循初始化ptree的XML代码:

   <Par2 Name='name2'>
        <Value>0.</Value>
        <Fix>1</Fix>
    </Par2>

我想把它的一部分传递给一个函数。基本上我想通过:

 void processTree( which_type_do_I_put_here element ){
     std::string n = element.get<std::string>("<xmlattr>.Name");
     double val = element.get<double>("Value");
 }

该功能可能如下所示:

ptree::get_child("par2")

一般情况下,我可以使用<xmlattr>传递子树。这样做的缺点是该函数无法访问此节点的<xmlattr>

如何通过{{1}}访问树的这一部分? 提前感谢任何想法。

〜彼得

1 个答案:

答案 0 :(得分:3)

类型为ptree

  

一般情况下,我可以使用ptree :: get_child(“par2”)传递子树。

确实

  

这样做的缺点是该函数无法访问此节点

那不对:

<强> Live On Coliru

#include <boost/property_tree/xml_parser.hpp>
#include <iostream>

std::string const sample = R"(
<Master Name='gamma'>
    <Par1 Name='name1'>
        <Value>0.</Value>
        <Fix>1</Fix>
    </Par1>
    <Par2 Name='name2'>
        <Value>0.</Value>
        <Fix>1</Fix>
    </Par2>
</Master>
)";

using boost::property_tree::ptree;

void processTree(ptree const& element) {
     std::string n = element.get<std::string>("<xmlattr>.Name");

     double val = element.get<double>("Value");
     std::cout << __FUNCTION__ << ": n=" << n << " val=" << val << "\n";
}

int main() {
    ptree pt;
    {
        std::istringstream iss(sample);
        read_xml(iss, pt);
    }

    processTree(pt.get_child("Master.Par2"));
}

打印哪些:

processTree: n=name2 val=0