|
除非没有其它更好的选择,不建议使用boost xml功能,它还不完善
1、关于xml_writer_settings编译出错的问题:
使用这条语句代替:
auto settings = boost::property_tree::xml_writer_make_settings<std::string>('\t',1);
基于C++14,boost1.70没有问题
2. 关于节点
如果使用
rootdata.add("annuniator.Model", "ShanDongShuangBai");
创建了一个节点Model,但是annuniator实际是不存在的,当写入xml文件时,annuniator节点自动创建
3. 关于find,这个函数似乎有bug,按照它的注释的说法,如果查询不到,它返回的应该是not_found,但实际这个判断条件并没有什么效果,在查找到所有的有效数据之后,find会把所有无效的数据也返回一遍;我不知道这个问题是不是与我数据格式相关的,可以确认的是not_found函数返回的数据是符合说明的,find函数返回的数据在查找完有效数据后的返回不符合说明。
---对此,要有效返回所有有效的检索,应该使用count函数,count可以返回所有要查询的数据的个数(假设为n),然后使用find函数查询n次即可。
4. node改名
ptree &child = pt0.get_child("a.b");
ptree::iterator it = child.to_iterator(child.find("c2"));
child.insert(it, make_pair("c3", it->second));
child.erase(it);
5. boost xml缺点
5.1 对于同名子节点定位过于繁琐,不能根据节点属性自动定位,要避免在同名节点中使用属性,查询和修改都很繁琐 |