boost库在解析XML时具有良好的性能,可操作性也很强下地址有个简单的说明

http://blog.csdn.net/luopeiyuan1990/article/details/9445691

一下是做的两个实例:入门教程,大神见笑,希望能帮助你尽快进入XML的开发之旅。

<root>
<delfile> <filenum> 35 </filenum> <paths>
<path>
<pathname>/tmp/tmp0/</pathname>
<before_hours> 0 </before_hours>
</path> <path>
<pathname>/tmp/tmp1/</pathname>
<before_hours> 1 </before_hours>
</path> <path>
<pathname>/tmp/tmp2/</pathname>
<before_hours> 2 </before_hours>
</path> <path>
<pathname>/tmp/tmp3/</pathname>
<before_hours> 3 </before_hours>
</path> <path>
<pathname>/tmp/tmp4/</pathname>
<before_hours> 4 </before_hours>
</path>
</paths> </delfile> <backup>
<backuptime> 23:59 </backuptime>
</backup> </root>

代码:(例程引用了狂人山庄的博客,感谢网友)

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/typeof/typeof.hpp>
#include <iostream> using namespace std; /* 相关的xml参考文件请参考del.conf */ void ReadConfig()
{
boost::property_tree::ptree pt; //定义一个存放xml的容器指针
boost::property_tree::read_xml("del.conf", pt); //读入目录下 del.conf文件 入口在pt这个指针
int filenum = pt.get<int>("root.delfile.filenum"); //将 xml文件中, root节点,下一层delfile 下一层的filenum 作为int类型取出,存在在filenum变量中。 cout << "filenum: " << filenum << endl;//不注释了 - - BOOST_AUTO(child, pt.get_child("root.delfile.paths")); //BOOST_AUTO自动获取表达式, 这里定义个一个节点child指针,并将指针指向 root下一层的delfile的下一层的paths
for (BOOST_AUTO(pos, child.begin()); pos != child.end(); ++pos)//由于paths节点有多个节点,并且这些节点名称一样,可以用遍历的方法来获取他们,方法见左
{
BOOST_AUTO(child_paths, pos->second.get_child("")); //此处不需要填结点名,但引号不能省.这里是获取该节点下所有子节点的意思,子节点获取后放在child_path这个指针
for (BOOST_AUTO(pos_paths, child_paths.begin()); pos_paths != child_paths.end(); ++pos_paths)
cout << pos_paths->second.data() << endl;
} }
int main()
{
ReadConfig();
return 0;
}

第二个教程。代码可读性不是很高,但是写法用了一个FOREACH,很简洁。

<debug name="debugname">
<file name="debug.log"/>
<modules type="internal">
<module1>Finance_Internal</module1>
<module2>Admin_Internal</module2>
<module3>HR_Internal</module3>
</modules> <modules type="external">
<module>Finance_External1</module>
<module>Admin_External2</module>
<module>HR_External3</module>
</modules>
</debug>

相应代码:

/*
* test2.cpp
*
* Created on: Jul 23, 2013
* Author: leo_luopy
*/
#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp> using namespace std;
using namespace boost::property_tree; int main(void)
{
ptree pt; //定义一个容器入口指针
read_xml("debug_settings.xml", pt); BOOST_FOREACH(ptree::value_type &v1, pt.get_child("debug")){ if(v1.first == "<xmlattr>"){ //it's an attribute
//read debug name="debugname"
cout<< "debug name=" << v1.second.get<string>("name") << endl;
}else if(v1.first == "file"){
//read file name="debug.log"
cout << " file name=" << v1.second.get<string>("<xmlattr>.name") << endl;
}
else{ // v1.first == "modules"
//get module type
cout<< " module type:" << v1.second.get<string>("<xmlattr>.type") << endl; //loop for every node under modules
BOOST_FOREACH(ptree::value_type &v2, v1.second){
if(v2.first == "<xmlattr>"){ //it's an attribute
//this can also get module type
cout<< " module type again:" << v2.second.get<string>("type") << endl;
}
else{
//all the modules have the same structure, so just use data() function.
cout<< " module name:" << v2.second.data() << endl;
}
}//end BOOST_FOREACH
}
}//end BOOST_FOREACH
return 0 ;
}

boost解析XML方法教程的更多相关文章

  1. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  2. Boost解析xml——xml写入

    <?xml version="1.0" encoding="utf-8"?> <Config> <Item name=" ...

  3. Boost 解析xml——插入Item

    XML格式为 <?xml version="1.0" encoding="utf-8"?> <Config> <Item name ...

  4. 解析XML文档之一:使用SAX解析

    使用sax解析xml方法总结 解析的的xml文档格式如下 <?xml version="1.0" encoding = "UTF-8"?> < ...

  5. 遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件

    XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...

  6. boost.property_tree解析xml的帮助类以及中文解析问题的解决(转)

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  7. (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  8. Java&Xml教程(六)使用JDOM解析XML文件

    JDOM 提供了非常优秀的Java XML API来更方便的读取.修改.生成XML文档.JDOM还提供了包装类供用户从SAX.DOM.STAX事件解析.STAX流解析中选择具体的实现. 在本教程中,我 ...

  9. Java&Xml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

随机推荐

  1. (转)迎接 Entity Framework 7

    对实体框架的下一版本的开发正在顺利进行中.我在 2014 年度北美 TechEd 上第一次了解 EF 团队的工作内容,当时项目经理 Rowan Miller 讨论了 Entity Framework ...

  2. 条形码(JBarcode)

    一世尘梦 少小离家老大回,妖娆尘世,程序唧唧:问君能有几多愁,恰是满屏BUG无处修. 商品条形码(JBarcode) 之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: ...

  3. C语言第12轮:指针

    C语言第12轮:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序.每一个字节编有序号.我们称之为地址.因为能够通过地址就能够找到所 ...

  4. 【iOS】Xib的使用与File&#39;Owner总结

    一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...

  5. 【转】NuGet的安装与使用

    学习了一段时间的MVC,今天想自己尝试初步搭建一个MVC框架,结果新建MVC4.0(MVC3.0同样)项目时,弹出一个错误提示框,如下图.上网一搜,说是要安装一个第三方组件NuGet.刚接触MVC,更 ...

  6. datagridcolumn单元格怎么显示查询到的某个表的字段值(字段值可能为多个)

    例如,在之前做的项目中,查询mhz_xckcr表,select出某个业务的现场勘察人信息,select出的现场勘察人姓名(可能有多个)要在前台datagrid的一个datagridcolmn单元格显示 ...

  7. leetcode第25题--Remove Element

    problem: Given an array and a value, remove all instances of that value in place and return the new ...

  8. Android 简介:Android SDK 和开发框架简介

    理解Android软件栈: 库: C/C++库(libc,SSL) Android 运行时可以让Android手机从本质上与一个移动Linux实现区分开来.Dalvik并不是Java虚拟机,是一个基于 ...

  9. Linq to sql与EF零碎知识点总结

    ------------------------------第一天(2013-3-25) 1.ado.net实体模型,(Ef) 2.创建上下文对象: 调用相应方法,最后调用.savechanges() ...

  10. [转]C# and the using Statement in 3 seconds and a bug in Reflector

    Using() Statement in 3 seconds and a bug in Reflector The boring, known accross the board definition ...