Using boost::property_tree

Dear all,

Having the following xml file:
<A>
<B/>
<B attr1="value1" attr2="value2" />
<C>
<D />
<E attr1="value3" />
<E attr1="value4" />
<F />
</C>
</A>

Trying boost::property_tree I want to:
1. delete first node <E attr1="value3" />
2. update the value of attr1 in the second node <E attr1="value4" />

However, it failed to compile.
Could you please help me.
Thanks!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  #include <boost/property_tree/xml_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/foreach.hpp>
#include <iostream>
using namespace boost::property_tree;

void create( const std::string & inputFileName, const std::string & outputFileName )
{
	ptree pt;
    read_xml(inputFileName, pt);
	ptree & Alphas= pt.get_child("A.C");
	ptree::iterator it=Alphas.begin();
	it++;
	it++;
	Alphas.erase(it);
	BOOST_FOREACH(ptree::value_type &v, pt.get_child("A.C")){
		if (v.first=="E"){
			v.second.set_value("<xmlattr>.attr1","new_value4");
		}
	}
	boost::property_tree::xml_writer_settings<char> settings('\t', 1);
	write_xml(outputFileName, pt, std::locale(), settings);
}
int main(){
	create("example_t.xml","new_example.xml");
	return 0;
	
}
The tree does not have a function set_value(...). It is either put_value(...) or in this case put(...).
Topic archived. No new replies allowed.