UPD 我在这里找到了“格式化”问题的答案,所以我删除了这部分问题,请阅读更新后的问题:
我需要在 C++ 上将 xml 写入文件系统。我学会了这个标题。在本教程中,使用了非常简单的 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");