【问题标题】:Updating XML file using Boost property_tree使用 Boost property_tree 更新 XML 文件
【发布时间】:2010-07-21 12:24:35
【问题描述】:

我有以下 XML 文件:

1参数1> 数据>

我想向 Data 节点添加一个新节点:Parameter2="2"。此代码不起作用,保存的文件仍然只包含一个参数:

boost::property_tree::ptree 树; boost::property_tree::ptree 数据树; read_xml("test.xml", 树); dataTree = tree.get_child("数据"); dataTree.put("Parameter2", "2"); boost::property_tree::xml_writer_settings w(' ', 4); write_xml("test.xml", 树, std::locale(), w);

如果我在 dataTree.put 之后添加这两行,我会得到正确的结果:

树.clear(); tree.add_child("数据", dataTree);

我不喜欢这个解决方案,因为它会给更复杂的树结构带来问​​题。是否可以在不删除/添加子节点的情况下更新属性树?

【问题讨论】:

    标签: c++ xml boost boost-propertytree


    【解决方案1】:

    您的代码几乎是正确的,这是更新子节点的正确方法。

    但是,有一个小错误。输入时:

    dataTree = tree.get_child("Data");
    

    您为 dataTree 分配一个“孩子”的副本。因此,下一行是指副本,而不是您的层次结构。你应该写:

    boost::property_tree::ptree &dataTree = tree.get_child("Data");
    

    所以你获得了对孩子的引用。

    完整的例子是:

      using namespace boost::property_tree;
      ptree tree;
    
      read_xml("data.xml", tree);
      ptree &dataTree = tree.get_child("Data");
      dataTree.put("Parameter2", "2");
    
      xml_writer_settings<char> w(' ', 4);
      write_xml("test.xml", tree, std::locale(), w);
    

    【讨论】:

    • 谢谢!非常有帮助,现在我不需要在非常不友好的 Boost 用户论坛中提问 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2023-03-21
    • 2023-03-07
    • 2011-12-30
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多