我正在处理如下所示的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”。
当我使用以下代码时,其中一个名称被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);

我的问题是此代码不执行任何操作。
我的猜测是,迭代器不是对我要修改的节点的引用,而是对该节点的副本的引用。

你有什么建议吗?

先感谢您。

最佳答案

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

10-06 06:01