我正在处理一个如下所示的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);
我的问题是这段代码没有做任何事情。 我的猜测是,迭代器不是对我想要修改的节点的引用,而是对该节点的副本的引用。
你有什么建议吗?
提前谢谢。
答案 0 :(得分:0)
为了解决我的问题,我决定使用TinyXML。 使用它来更新和修改XML文件要容易得多。