2011-06-16 101 views
2

我的工作,看起來像這樣一個XML文件:boost ptree - 如何使用迭代器修改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替換。

#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

你在使用哪種boost庫? – 2011-06-16 19:07:02

+0

我認爲它的Boost Property樹。 – yasouser 2011-06-16 19:08:43

+0

發佈真正的迭代器代碼,以上是不可編譯的。 – 2011-06-16 19:14:25

回答

0

爲了解決我的問題,我決定使用TinyXML。 它更容易用於更新和修改XML文件。