boost::property_tree 传递的子树包括 <xmlattr>
boost::property_tree passing subtree including <xmlattr>
我正在尝试将 boost::property_tree::ptree 的元素传递给函数。
详细地说,我必须遵循 XML 初始化 ptree 的代码:
<Master Name='gamma'>
<Par1 Name='name1'>
<Value>0.</Value>
<Fix>1</Fix>
</Par1>
<Par2 Name='name2'>
<Value>0.</Value>
<Fix>1</Fix>
</Par2>
</Master>
我想将它的一部分传递给一个函数。基本上我想通过:
<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>
?
提前感谢您的任何想法。
~彼得
类型是 ptree
.
In general I could pass a subtree using ptree::get_child("par2").
确实如此。
This has the disadvantage that the function has no access to of this node
不对:
#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
我正在尝试将 boost::property_tree::ptree 的元素传递给函数。 详细地说,我必须遵循 XML 初始化 ptree 的代码:
<Master Name='gamma'>
<Par1 Name='name1'>
<Value>0.</Value>
<Fix>1</Fix>
</Par1>
<Par2 Name='name2'>
<Value>0.</Value>
<Fix>1</Fix>
</Par2>
</Master>
我想将它的一部分传递给一个函数。基本上我想通过:
<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>
?
提前感谢您的任何想法。
~彼得
类型是 ptree
.
In general I could pass a subtree using ptree::get_child("par2").
确实如此。
This has the disadvantage that the function has no access to of this node
不对:
#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