boost ptree - 如何使用迭代器修改XML?

时间:2011-06-16 18:28:19

标签: c++ xml boost

我正在处理一个如下所示的XML文件:

<persons>
  <person>
    <name>NAME1</name>
    <ID>ID1</ID>
  </person>
  <person>
    <name>NAME2</name>
    <ID>ID2</ID>
  </person>
  <person>
    <name>NAME3</name>
    <ID>ID3</ID>
  </person>
... etc
</persons>

我需要用“OTHERNAME”替换所有名称。 当我使用folows的代码时,其中一个名称被OTHERNAME替换。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using boost::property_tree::ptree;

ptree pt;
read_xml(filename,pt);
ptree &pt_persons = pt.get_child("persons");
ptree &pt_person = pt_person.get_child("person");
pt_person.put("NAME","OTHERNAME");

但是,我想替换所有名称,所以我尝试了这段代码:

ptree pt
read_xml(filename,pt);
ptree &pt_persons = pt.get_child("persons");
for( ptree::iterator &it = pt_persons.begin(); it != pt_persons.end();it++){
        ptree &pt_person = it->second;
        pt_person.put("NAME","OTHERNAME");
}
write_xml(filename, pt);

我的问题是这段代码没有做任何事情。 我的猜测是,迭代器不是对我想要修改的节点的引用,而是对该节点的副本的引用。

你有什么建议吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

为了解决我的问题,我决定使用TinyXML。 使用它来更新和修改XML文件要容易得多。

相关问题