4

次の形式で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>

次の形式で temp1 を作成することで、必要な xml ファイルを取得できました。

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

1 に答える 1

6

あなたの状況は少し最適ではありません (そして、私はあなたが与えた作業スニペットを大いに支持します)。

これがうまくいくでしょう:

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

Live On Coliru

#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>
于 2016-03-15T21:18:19.843 に答える