boost :: property_tree, передающее поддерево, включая & lt; xmlattr & gt;

Я пытаюсь передать элементы 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>?
Заранее спасибо за любые идеи.

~ Питер

2

Решение

Тип является ptree,

В общем, я мог передать поддерево, используя ptree :: get_child («par2»).

В самом деле.

Это имеет тот недостаток, что функция не имеет доступа к этому узлу

Это не правильно:

Жить на Колиру

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]