gpt4 book ai didi

c++ - 使用 boost property tree 编写比简单的 xml 更复杂

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:24 27 4
gpt4 key购买 nike

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" ) 根据文档看来我应该将它们添加到“子键”,但是如何?

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");

最佳答案

This回答最后一个问题 - 如何使用多个同名节点。最后我写了这样一个解决问题的程序

#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;

boost::property_tree::ptree rootNode;
boost::property_tree::ptree setNode1;
boost::property_tree::ptree setNode2;
boost::property_tree::ptree fieldNode1;
boost::property_tree::ptree fieldNode2;
boost::property_tree::ptree fieldNode3;
boost::property_tree::ptree fieldNode4;

fieldNode1.put("<xmlattr>.Name", "Hello 1");
fieldNode2.put("<xmlattr>.Name", "World 1");
fieldNode3.put("<xmlattr>.Name", "Hello 2");
fieldNode4.put("<xmlattr>.Name", "World 2");

setNode1.add_child("Field", fieldNode1);
setNode1.add_child("Field", fieldNode2);
setNode2.add_child("Field", fieldNode3);
setNode2.add_child("Field", fieldNode4);

setNode1.put("<xmlattr>.Name", "1");
setNode2.put("<xmlattr>.Name", "2");

rootNode.add_child("Set", setNode1);
rootNode.add_child("Set", setNode2);
pt.add_child("Root", rootNode);

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 Name="1">
<Field Name="Hello 1"/>
<Field Name="World 1"/>
</Set>
<Set Name="2">
<Field Name="Hello 2"/>
<Field Name="World 2"/>
</Set>
</Root>

关于c++ - 使用 boost property tree 编写比简单的 xml 更复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875437/

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