使用boost/property_tree进行XML操作
之前一直用tinyxml来进行XML文件操作,刚刚接触的一个测试项目是使用boost操作的,虽然不清楚这两者的差异,但boost使用起来还挺方便的,所以简单整理一些关于boost解析和创建XML文件的的操作方法,如果有错误欢迎指正。
首先,简单介绍一下怎么安装boost_1_55_0,我是安装在D盘上的。
运行cmd.exe:
C:\Users\Administrator>D:
D:\>cd D:boost_1_55_0
D:\boost_1_55_0>bootstrap.bat
( 执行完会在boost_1_55_0下生成一个bjam.exe文件。)
D:\boost_1_55_0>bjam.exe
( 此过程将默认根据系统安排好的编译工具来编译相应的lib文件和头文件,时间会略久些。)
当控制台出现 D:boost_1_55_0> 时,我们就完成了boost库的安装。
其次,关于属性配置:
VC++目录 -> 包含目录 -> D:\boost_1_55_0
库目录 -> D:\boost_1_55_0\stage\lib
C++ -> 常规 -> 附加包含目录 -> D:\boost_1_55_0
连接器 -> 常规 -> 附加库目录 -> D:\boost_1_55_0\stage\lib
-> 输入-> 附加依赖项 -> libboost_signals-vc120-mt-gd-1_55.lib
libboost_regex-vc120-mt-gd-1_55.lib
下面通过一个小demo来具体操作:将下面这个名为MyXML.xml的文件内容解析出来,并将解析结果自动的重新写回到另外一个名为AutoCreateXML.xml的文件中。
配置属性 -> 调试 -> 命令参数 -> MyXML.xml
接下来开始编写代码。
这个程序已经编译通过并得到预期结果。下面关于程序做几点说明:
1).boost::property_tree::xml_writer_settings<char>settings('\t', 1);
boost::property_tree::xml_parser::write_xml(xmlOutputString, datum, std::locale(), settings);
通过settings使输出格式更加规范化,注意xmlOutputString必须为string型。
2).与tinyxml不同,ptree是先定义子节点信息,最后添加父节点。
3).xml文件中的文字部分若加双引号,则解析出来会添加一个&quoc的符号,具体原因我也不清楚,在实际应用时注意尽量避免文字部分加双引号就好了。