gpt4 book ai didi

c++ - boost property_tree 在循环中添加节点

转载 作者:行者123 更新时间:2023-11-30 02:42:44 34 4
gpt4 key购买 nike

如何在循环数组时向属性树添加节点?

这可能是一件简单的事情,但我只是不明白如何使用 boost_property_tree。

我有一组值,我想将其添加到属性树并将其输出为 xml。如果我对节点进行硬编码并手动将它们添加到根节点,它会起作用,但如果我尝试从循环内部执行此操作,则 xml 无效,仅包含数组中的一个节点,并且没有任何 xml 节点终止。

这是一个可变长度的数据数组,因此不可能对节点进行硬编码。做这样的事情根本行不通。我不明白为什么?

ptree listnode;
std::vector<data> dataarray= ...
for(auto data : dataarray)
{
ptree node;
...

listnode.add_child("value", node)
}
...

我想要的是这样的:

<list>
<value active="true">12</value>
<value active="true">44</value>
<value active="true">23</value>
</list>

但是生成的 xml 看起来像这样:

<list>
<value active="true">

它在第一个值节点之后停止。没有异常(exception)或任何事情,所以我假设我的 property_tree 无效或者它的 xml_parser::write_xml 无法创建 xml。

很可能我误解了如何使用 boost::property_tree。但真的,输出列表一定是一件非常简单的事情吧?

最佳答案

Live On Coliru

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

using namespace boost::property_tree;

int main() {
ptree pt;

auto& list = pt.add_child("list", ptree{});

for (auto data : { 12, 44, 23 })
list.add("value", data)
.add("<xmlattr>.active", true);

xml_parser::write_xml(std::cout, pt);
}

生成的 XML:

<?xml version="1.0" encoding="utf-8"?>
<list>
<value active="true">12</value>
<value active="true">44</value>
<value active="true">23</value>
</list>

关于c++ - boost property_tree 在循环中添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811597/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com