【发布时间】:2013-09-23 09:38:57
【问题描述】:
UPD 我找到了“格式化”问题here 的答案,所以我删除了这部分问题,请阅读更新后的问题:
我需要在 C++ 上将 xml 写入文件系统。 我已经学习了this 标题。在本教程中,使用了非常简单的 xml。我的 xml 比较复杂,我不知道如何修改代码来生成它。这就是我的代码:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
//<Root>
// <Set Name="1">
// <Field Name="Hello 1"/>
// <Field Name="World 1"/>
// </Set>
// <Set Name="2">
// <Field Name="Hello 2"/>
// <Field Name="World 2"/>
// </Set>
//</Root>
int main(int argc, char* argv[])
{
using boost::property_tree::ptree;
ptree pt;
pt.put("Root.Set.Field", "Hello");
pt.put("Root.Set.Field", "World");
boost::property_tree::xml_writer_settings<char> settings('\t', 1);
write_xml("testXml.xml", pt, std::locale(), settings);
return 0;
}
输出是:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Set>
<Field>World</Field>
</Set>
</Root>
如何修改我的程序以生成所需的 xml,特别是:
- 如何添加多个同名节点?添加
true这样pt.put("Root.Set.Field", "Hello", true);是编译时错误 - 如何设置xml属性? (
Name="Hello 1") 根据 doc 看来我应该将它们添加到“子键”中,但是如何?
upd 我试过了:pt.put("Root.Set.Field.xmlattr.Name", "Hello 1"); 期待看到 <Field Name="Hello 1"/> 但仍然不起作用。等待可以分享正确语法的人。
upd2 宾果游戏,这个语法有效,明天我将继续尝试打印所需的 xml。 pt.put("Root.Set.Field.<xmlattr>.Name", "Hello 1");
【问题讨论】:
-
如果我可以使用
boost做我需要做的事情,我宁愿继续使用 boost。我不想为配置解析添加额外的框架。 -
如果只是为了配置解析,那么你真的需要详细控制数据在配置中的存储方式吗?在 property_tree API 级别操作并让 boost 存储它作为实现细节,您会不会更高兴?
标签: c++ boost boost-propertytree