如何手动创建具有不同 XML 属性的提升 ptree

How to manually create a boost ptree with different XML attributes?

本文关键字:属性 ptree XML 创建 何手动      更新时间:2023-10-16

我正在使用提升库来解析XML文件,我必须手动创建一个ptree。我想使用提升树创建下面的 xml 文件。

<?xml version="1.0"?>
<Txn>
    <Resp errCode="0" errInfo="" />
    <A exptime="20171230">xyz Information</A>
    <B>xyz Information</B>
    <C type="Active">xyz Information</C>
</Txn>

要达到 xml 以上,下面是我的示例代码:

boost::property_tree::ptree pt;
boost::property_tree::ptree ptr1;
boost::property_tree::ptree ptr2;
boost::property_tree::ptree ptr3;
ptr1.put("<xmlattr>.errCode", Txn.resp.errCode);
ptr1.put("<xmlattr>.errInfo", Txn.resp.errInfo);
ptr2.push_back(boost::property_tree::ptree::value_type("A", boost::property_tree::ptree(data)));
ptr2.push_back(boost::property_tree::ptree::value_type("C", boost::property_tree::ptree(data)));
ptr2.put("A.<xmlattr>.exptime", data);
ptr2.put("C.<xmlattr>.type", data);

ptr3.put("<xmlattr>", data);
pt.add_child("Txn.Resp", ptr1);
pt.add_child("Txn", ptr2);
pt.add_child("Txn.B", ptr3);

在这里,子AC始终与父Txn单独创建,但我想将所有子项添加到Txn父级中

.我不明白,为什么孩子A和C在这里不同。如果有人帮助我提供正确的方式,那将非常有帮助。

这是我

能想到的最简单的事情:

住在科里鲁

#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
using boost::property_tree::ptree;
static auto pretty = boost::property_tree::xml_writer_make_settings<std::string>(' ', 4);
int main() {
    ptree root;
    root.add("Txn.Resp.<xmlattr>.errCode", 0);
    root.add("Txn.Resp.<xmlattr>.errInfo", "");
    root.add("Txn.A", "xyz Information");
    root.add("Txn.A.<xmlattr>.exptime", "20171230");
    root.add("Txn.B", "xyz Information");
    root.add("Txn.C", "xyz Information");
    root.add("Txn.C.<xmlattr>.type", "Active");
    write_xml(std::cout, root, pretty);
}

指纹:

<?xml version="1.0"?>
<Txn>
    <Resp errCode="0" errInfo="" />
    <A exptime="20171230">xyz Information</A>
    <B>xyz Information</B>
    <C type="Active">xyz Information</C>
</Txn>

关键点是在添加属性之前创建元素节点,否则你会得到这个:

住在科里鲁

<?xml version="1.0" encoding="utf-8"?>
<Txn>
    <Resp errCode="0" errInfo=""/>
    <A exptime="20171230"/>
    <A>xyz Information</A>
    <B>xyz Information</B>
    <C type="Active"/>
    <C>xyz Information</C>
</Txn>