首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

acl_cpp 编程之 xml 流式解析与创造

2012-06-28 
acl_cpp 编程之 xml 流式解析与创建? ? ? xml 数据格式做为当今WEB开发的重要数据格式之一,应用非常普及,

acl_cpp 编程之 xml 流式解析与创建

? ? ? xml 数据格式做为当今WEB开发的重要数据格式之一,应用非常普及,在文章 <acl 之 xml 流解析器>?中,专门讲述了 acl 库中是如何实现流式 xml 数据解析的,在 acl_cpp 库中利用 c++ 语言特点对 acl 中的 xml 流式解析进行了进一步封装,从而更加方便用户使用,其中主要涉及到两个类:xml 类和 xml_node 类,现在分别就这两个类的函数功能做一简单介绍。

?

一、解析过程中的用法

? ? ? 1、 xml 类中的主要方法如下:

?

? ? ? 上面的例子中是一次性将 xml 数据传给 acl::xml 解析器进行解析的,当然也可以采用如下的方法:

acl::xml_node& root = xml.get_root();  // 获得 xml 的根结点acl::xml_node* node1, *node2, *node11;// 创建一个 xml_node 结点xml.get_root().add_child("test1", true)  // 因第二个参数为 true,所以 add_child 函数返回新创建子结点的引用.add_attr("name1_1", "value1_1")  // 给 test1 结点添加属性.add_attr("name1_2", "value1_2").add_attr("name1_3", "value1_3");.add_child("test11", true)  // 给 test1 结点添加一个标签值为 test11 的子结点.add_attr("name11_1", "value11_1")  // 给 test11 子结点添加属性.add_attr("name11_2", "value11_2").add_attr("name11_3", "value11_3");.get_parent()  // 返回 test11 结点的父结点的引用,即返回 test1 结点.get_parent()  // 返回 test1 结点的引用即返回 xml 的 root 结点.add_child("test2", true)  // 给 xml 根结点添加 test2 子结点.add_attr("name2_1", "value2_1")  // 给 test2 子结点添加属性.add_attr("name2_2", "value2_2").add_attr("name2_3", "value2_3");
?

?

? ? ? 可以看出,第二种写法更加简洁有效,同时逻辑关系更为清晰,有种一气呵成的感觉,呵呵。当然,读者可以根据自己的习惯使用其中任意一种写法。另外,大家仔细查看 xml_node 类的声明可能会看出,该类的构造函数和析构函数是私有的,这意味着用户不能使用 new 或delete 来手工创建和销毁 xml_node 类对象,同时不能如 acl::xml_node node 这样定义对象,这就说,xml_node 对象只能是由 acl::xml 类对象或 acl::xml_node 类对象来创建,同时对所有 xml_node 类对象的销毁都是在 acl::xml 类对象内部自动完成的,即当 xml 对象销毁时,这些内部动态创建的 xml_node 结点会被自动销毁;如果用户想在 acl::xml 类对象销毁之前提前销毁所有的 acl::xml_node 类对象,则用户可以手工调用 acl::xml类中的 reset() 方法来达到此目的。

?

? ? ? 使用 xml 的例子在:samples/xml 目录下

? ? ? acl_cpp 下载:http://sourceforge.net/projects/aclcpp/

? ? ? 原文地址:http://zsxxsz.iteye.com/blog/1506643

? ? ? 更多文章:http://zsxxsz.iteye.com/

?

热点排行