如何使用XML属性手动创建boost ptree?

Jav*_*ano 5 c++ xml boost boost-propertytree

我一直在使用boost库来解析XML文件,我必须手动创建一个ptree.我需要向ptree添加XML属性.这是boost文档建议的内容:

ptree pt;
pt.push_back(ptree::value_type("pi", ptree("3.14159")));
Run Code Online (Sandbox Code Playgroud)

这会添加一个包含内容的元素,但我还需要为元素添加一个属性.

上面的代码产生:

<pi>3.14</pi>
Run Code Online (Sandbox Code Playgroud)

我需要添加这样的东西:

<pi id="pi_0">3.14</pi> 
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能添加属性id="pi_0"

seh*_*ehe 6

您使用"假"节点<xmlattr>:http://www.boost.org/doc/libs/1_46_1/doc/html/boost_propertytree/parsers.html#boost_propertytree.parsers.xml_parser

Live On Coliru

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

using boost::property_tree::ptree;

int main() {

    ptree pt;
    pt.push_back(ptree::value_type("pi", ptree("3.14159")));
    pt.put("pi.<xmlattr>.id", "pi_0");

    write_xml(std::cout, pt);
}
Run Code Online (Sandbox Code Playgroud)

打印

<?xml version="1.0" encoding="utf-8"?>
<pi id="pi_0">3.14159</pi>
Run Code Online (Sandbox Code Playgroud)