Добавление дочернего дочернего элемента для повышения ptree

Допустим, я собираюсь создать XML в следующем виде:

<main>
<elements>
<element name="elem1"><temp/>
</element>
<element name="elem2"><temp/>
</element>
</elements>
</main>

У меня есть следующий код:

ptree pt;
pt.put("main","");

ptree temp1;
temp1.put("element","");
temp1.put("element.<xmlattr>.name","elem1");
temp1.put("element.temp");

ptree temp2;
temp2.put("element","");
temp2.put("element.<xmlattr>.name","elem2");
temp2.put("element.temp");

//temp1 represents the 1st <element>...</element>
//temp2 represents the 1st <element>...</element>

//Add temp1 and temp2 to <main> under <elements>

Я бы предположил, что будет работать следующее:

pt.add_child("main.elements",temp1);
pt.add_child("main.elements",temp2);

Однако это создает следующий XML:

<main>
<elements>
<element name="elem1"><temp/>
</element>
</elements>
<elements>
<element name="elem2"><temp/>
</element>
<elements>
</main>

Я смог получить необходимый файл XML, сделав мой temp1 в следующей форме:

temp1.put("<xmlattr>.name","elem1");
temp1.put("temp","");
temp2.put("<xmlattr>.name","elem2");
temp2.put("temp","");
pt.add_child("main.elements.element",temp1);
pt.add_child("main.elements.element",temp2);

Есть ли способ, которым я могу работать с моими начальными узлами temp1 и temp2, чтобы получить желаемую структуру xml?

4

Решение

Ваша ситуация немного неоптимальна (и я бы очень одобрил приведенный вами рабочий фрагмент).

Вот что будет работать:

pt.add_child("main.elements.element", temp1.get_child("element"));
pt.add_child("main.elements.element", temp2.get_child("element"));

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

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

using boost::property_tree::ptree;

int main() {
ptree temp1;
temp1.put("element.<xmlattr>.name","elem1");
temp1.put_child("element.temp", {});

ptree temp2;
temp2.put("element.<xmlattr>.name","elem2");
temp2.put("element.temp", "");

//Add temp1 and temp2 to <main> under <elements>
ptree pt;
pt.add_child("main.elements.element", temp1.get_child("element"));
pt.add_child("main.elements.element", temp2.get_child("element"));
write_xml(std::cout, pt, boost::property_tree::xml_writer_make_settings<std::string>(' ', 4, "utf-8"));
}

Печать

<?xml version="1.0" encoding="utf-8"?>
<main>
<elements>
<element name="elem1">
<temp/>
</element>
<element name="elem2">
<temp/>
</element>
</elements>
</main>
4

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

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

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