acl  3.5.3.0
acl::xml类 参考abstract

#include <xml.hpp>

+ 类 acl::xml 继承关系图:
+ acl::xml 的协作图:

Public 成员函数

 xml (size_t dbuf_nblock=2, size_t dbuf_capacity=100)
 
virtual ~xml (void)
 
virtual xmlignore_slash (bool on)=0
 
virtual xmlxml_decode (bool on)=0
 
virtual xmlxml_encode (bool on)=0
 
virtual xmlxml_multi_root (bool on)=0
 
virtual const char * update (const char *data)=0
 
virtual bool complete (const char *root_tag)=0
 
virtual void reset (void)=0
 
virtual const stringgetText (void)
 
virtual const std::vector< xml_node * > & getElementsByTagName (const char *tag) const =0
 
virtual xml_nodegetFirstElementByTag (const char *tag) const =0
 
virtual const std::vector< xml_node * > & getElementsByTags (const char *tags) const =0
 
virtual xml_nodegetFirstElementByTags (const char *tags) const =0
 
virtual const std::vector< xml_node * > & getElementsByName (const char *value) const =0
 
virtual const std::vector< xml_node * > & getElementsByAttr (const char *name, const char *value) const =0
 
virtual xml_nodegetElementById (const char *id) const =0
 
virtual xml_nodecreate_node (const char *tag, const char *txt=NULL)=0
 
virtual xml_nodecreate_node (const char *tag, istream &in, size_t off=0, size_t len=0)=0
 
xml_nodecreate_node (const char *tag, long long int number)
 
virtual xml_nodeget_root (void)=0
 
virtual xml_nodefirst_node (void)=0
 
virtual xml_nodenext_node (void)=0
 
virtual void build_xml (string &out) const
 
virtual const char * to_string (size_t *len=NULL) const =0
 
virtual size_t space (void) const =0
 
virtual void space_clear (void)=0
 
virtual size_t node_count (void) const =0
 
virtual size_t attr_count (void) const =0
 
virtual int push_pop (const char *in, size_t len, string *out, size_t max=0)
 
virtual int pop_end (string *out, size_t max=0)
 
virtual void clear (void)
 
- Public 成员函数 继承自 acl::pipe_stream
 pipe_stream ()
 
virtual ~pipe_stream ()
 
- Public 成员函数 继承自 acl::dbuf_obj
 dbuf_obj (dbuf_guard *guard=NULL)
 
virtual ~dbuf_obj ()
 
int pos () const
 
dbuf_guardget_guard () const
 

Protected 属性

dbuf_guard dbuf_
 
std::vector< xml_node * > elements_
 
stringbuf_
 
ACL_TOKENm_pTokenTree
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

在文件 xml.hpp331 行定义.

构造及析构函数说明

◆ xml()

acl::xml::xml ( size_t  dbuf_nblock = 2,
size_t  dbuf_capacity = 100 
)
参数
dbuf_nblock{size_t} 内部所用 dbuf_guard 的初始化参数
dbuf_capacity{size_t} 内部所用 dbuf_guard 的初始化参数

◆ ~xml()

virtual acl::xml::~xml ( void  )
virtual

成员函数说明

◆ attr_count()

virtual size_t acl::xml::attr_count ( void  ) const
pure virtual

获得当前 xml 对象中所有 xml 节点属性的总数

返回
{size_t}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ build_xml()

virtual void acl::xml::build_xml ( string out) const
inlinevirtual

将 xml 对象树转成字符串

参数
out{string&} 存储转换结果的缓冲区

acl::xml2 , 以及 acl::xml1 重载.

在文件 xml.hpp540 行定义.

540 { (void) out; };

◆ clear()

virtual void acl::xml::clear ( void  )
virtual

重载 acl::pipe_stream .

◆ complete()

virtual bool acl::xml::complete ( const char *  root_tag)
pure virtual

判断 XML 解析是否完毕

参数
root_tag{const char*} 根节点标签名,非 NULL 字符串,用该标签名 与 xml 对象中最外层的标签名比较是否相同
返回
{bool}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ create_node() [1/3]

virtual xml_node& acl::xml::create_node ( const char *  tag,
const char *  txt = NULL 
)
pure virtual

创建一个 xml_node 节点对象

参数
tag{const char*} 标签名
txt{const char*} 文本字符串
返回
{xml_node*} 新产生的 xml_node 对象不需要用户手工释放,因为 在 xml 对象被释放时这些节点会自动被释放,当然用户也可以在不用时调 用 reset 来释放这些 xml_node 节点对象

acl::xml2 , 以及 acl::xml1 内被实现.

◆ create_node() [2/3]

virtual xml_node& acl::xml::create_node ( const char *  tag,
istream in,
size_t  off = 0,
size_t  len = 0 
)
pure virtual

创建一个 xml_node 节点对象,同时指定输入流中的内容做为节点文本内容

参数
tag{const char*} 标签名
in{istream&} 输入流对象
off{size_t} 对于文件流,则指定要拷贝的数据的起始位置
len{size_t} 要拷贝的最大数据量,当为 0 时,则一直拷贝到流结束
返回
{xml_node*} 新产生的 xml_node 对象不需要用户手工释放,因为 在 xml 对象被释放时这些节点会自动被释放,当然用户也可以在不用时调 用 reset 来释放这些 xml_node 节点对象

acl::xml2 , 以及 acl::xml1 内被实现.

◆ create_node() [3/3]

xml_node& acl::xml::create_node ( const char *  tag,
long long int  number 
)

创建一个 xml_node 节点对象

参数
tag{const char*} 标签名
number{long long int} 64 位整数
返回
{xml_node*} 新产生的 xml_node 对象不需要用户手工释放,因为 在xml 对象被释放时这些节点会自动被释放,当然用户也可以在不用时调用 reset 来释放这些 xml_node 节点对象

◆ first_node()

virtual xml_node* acl::xml::first_node ( void  )
pure virtual

开始遍历该 xml 对象并获得第一个节点

返回
{xml_node*} 返回空表示该 xml 对象为空节点 注:返回的节点对象用户不能手工释放,因为该对象被 内部库自动释放

acl::xml2 , 以及 acl::xml1 内被实现.

◆ get_root()

virtual xml_node& acl::xml::get_root ( void  )
pure virtual

获得根节点对象,但需要注意,该节点为虚节点,里面不存放任何数据, 它是所有 xml 节点对象的最顶层父对象

返回
{xml_node&}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getElementById()

virtual xml_node* acl::xml::getElementById ( const char *  id) const
pure virtual

从 xml 对象中获得指定 id 值的 xml 节点元素

参数
id{const char*} id 值
返回
{const xml_node*} xml 节点元素, 若返回 NULL 则表示没有符合 条件的 xml 节点, 返回值不需要释放

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getElementsByAttr()

virtual const std::vector<xml_node*>& acl::xml::getElementsByAttr ( const char *  name,
const char *  value 
) const
pure virtual

从 xml 对象中获得所有给定属性名及属性值的 xml 节点元素集合

参数
name{const char*} 属性名
value{const char*} 属性值
返回
{const std::vector<xml_node*>&} 返回结果集的对象引用, 如果查询结果为空,则该集合为空,即:empty() == true

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getElementsByName()

virtual const std::vector<xml_node*>& acl::xml::getElementsByName ( const char *  value) const
pure virtual

从 xml 对象中获得所有与给定属性名 name 的属性值相同的 xml 节点集合

参数
value{const char*} 属性名为 name 的属性值
返回
{const std::vector<xml_node*>&} 返回结果集的对象引用, 如果查询结果为空,则该集合为空,即:empty() == true 注:返回的数组中的 xml_node 节点数据可以修改,但不能删除该节点, 因为该库内部有自动删除的机制

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getElementsByTagName()

virtual const std::vector<xml_node*>& acl::xml::getElementsByTagName ( const char *  tag) const
pure virtual

从 XML 对象中取得某个标签名的所有节点集合

参数
tag{const char*} 标签名(不区分大小写)
返回
{const std::vector<xml_node*>&} 返回结果集的对象引用, 如果查询结果为空,则该集合为空,即:empty() == true 注:返回的数组中的 xml_node 节点数据可以修改,但不能删除该节点, 因为该库内部有自动删除的机制

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getElementsByTags()

virtual const std::vector<xml_node*>& acl::xml::getElementsByTags ( const char *  tags) const
pure virtual

从 xml 对象中获得所有的与给定多级标签名相同的 xml 节点的集合

参数
tags{const char*} 多级标签名,由 '/' 分隔各级标签名,如针对 xml 数据: <root> <first> <second> <third name="test1"> text1 </third> </second> </first> ... <root> <first> <second> <third name="test2"> text2 </third> </second> </first> ... <root> <first> <second> <third name="test3"> text3 </third> </second> </first> ... 可以通过多级标签名:root/first/second/third 一次性查出所有符合条件的节点
返回
{const std::vector<xml_node*>&} 符合条件的 xml 节点集合, 如果查询结果为空,则该集合为空,即:empty() == true 注:返回的数组中的 xml_node 节点数据可以修改,但不能删除该节点, 因为该库内部有自动删除的机制

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getFirstElementByTag()

virtual xml_node* acl::xml::getFirstElementByTag ( const char *  tag) const
pure virtual

从 xml 对象中获得对应标签名的第一个 xml 节点对象

参数
tag{const char*} 标签名(不区分大小写)
返回
{xml_node*} 返回空表明该标签对应的 xml 节点不存在

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getFirstElementByTags()

virtual xml_node* acl::xml::getFirstElementByTags ( const char *  tags) const
pure virtual

从 xml 对象中获得指定多级标签名的第一个 xml 节点

参数
tags{const char*} 多级标签名,由 '/' 分隔各级标签名,如针对 xml 数据: <root> <first> <second> <third name="test1"> text1 </third> </second> </first> ... <root> <first> <second> <third name="test2"> text2 </third> </second> </first> ... <root> <first> <second> <third name="test3"> text3 </third> </second> </first> ... 可以通过多级标签名:root/first/second/third 一次性查出所有符合条件的节点
返回
{xml_node*} 返回空表示不存在

acl::xml2 , 以及 acl::xml1 内被实现.

◆ getText()

virtual const string& acl::xml::getText ( void  )
virtual

从解析的 XML 原始数据中仅提取文本部分

返回
{const string&} 返回结果缓冲区的引用,该引用是内 部变量,用户不需要释放

acl::xml2 , 以及 acl::xml1 重载.

◆ ignore_slash()

virtual xml& acl::xml::ignore_slash ( bool  on)
pure virtual

对于非闭合的标签,是否需要忽略闭合字符 '/',缺省为不忽略

参数
on{bool}
返回
{xml&}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ next_node()

virtual xml_node* acl::xml::next_node ( void  )
pure virtual

遍历该 xml 对象的下一个 xml 节点

返回
{xml_node*} 返回空表示遍历完毕 注:返回的节点对象用户不能手工释放,因为该对象被 内部库自动释放

acl::xml2 , 以及 acl::xml1 内被实现.

◆ node_count()

virtual size_t acl::xml::node_count ( void  ) const
pure virtual

获得当前 xml 对象中 xml 节点的总数

返回
{size_t}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ pop_end()

virtual int acl::xml::pop_end ( string out,
size_t  max = 0 
)
virtual

实现了 acl::pipe_stream.

◆ push_pop()

virtual int acl::xml::push_pop ( const char *  in,
size_t  len,
string out,
size_t  max = 0 
)
virtual

实现了 acl::pipe_stream.

◆ reset()

virtual void acl::xml::reset ( void  )
pure virtual

重置 XML 解析器状态,该 XML 对象可以用来对多个 XML 数据 进行解析,在反复使用本 XML 解析器前,需要调用本函数重置 内部 XML 解析器状态,清除上一次的解析结果

acl::xml2 , 以及 acl::xml1 内被实现.

◆ space()

virtual size_t acl::xml::space ( void  ) const
pure virtual

获得当前 xml 对象已经分配的内存大小总和

返回
{size_t}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ space_clear()

virtual void acl::xml::space_clear ( void  )
pure virtual

将记录 xml 已分配内存大小的变量清 0

acl::xml2 , 以及 acl::xml1 内被实现.

◆ to_string()

virtual const char* acl::xml::to_string ( size_t *  len = NULL) const
pure virtual

将 xml 对象转换为字符串

参数
len{size_t*} 非 NULL 时存放数据长度
返回
{const char*} xml 字符串

acl::xml2 , 以及 acl::xml1 内被实现.

◆ update()

virtual const char* acl::xml::update ( const char *  data)
pure virtual

以流式方式循环调用本函数添加 XML 数据,也可以一次性添加 完整的 XML 数据,如果是重复使用该 XML 解析器解析多个 XML 对象,则应该在解析下一个 XML 对象前调用 reset() 方法来清 除上一次的解析结果

参数
data{const char*} xml 数据
返回
{const char*} 当解析完毕时还有剩余数据,则该返回值返回 剩余的数据; 如果 data 为 '\0',则说明已经处理完输入的数据

acl::xml2 , 以及 acl::xml1 内被实现.

◆ xml_decode()

virtual xml& acl::xml::xml_decode ( bool  on)
pure virtual

解析 xml 对象时,是否自动进行 xml 解码,缺省解码

参数
on{bool}
返回
{xml&}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ xml_encode()

virtual xml& acl::xml::xml_encode ( bool  on)
pure virtual

创建 xml 对象时,是否自动进行 xml 编码,缺省编码

参数
on{bool}
返回
{xml&}

acl::xml2 , 以及 acl::xml1 内被实现.

◆ xml_multi_root()

virtual xml& acl::xml::xml_multi_root ( bool  on)
pure virtual

解析 xml 时是否允许有多个根节点(内部缺省为允许)

参数
on{bool} @retrn {xml&}

acl::xml2 , 以及 acl::xml1 内被实现.

类成员变量说明

◆ buf_

string* acl::xml::buf_
protected

在文件 xml.hpp583 行定义.

◆ dbuf_

dbuf_guard acl::xml::dbuf_
protected

在文件 xml.hpp581 行定义.

◆ elements_

std::vector<xml_node*> acl::xml::elements_
protected

在文件 xml.hpp582 行定义.

◆ m_pTokenTree

ACL_TOKEN* acl::xml::m_pTokenTree
protected

在文件 xml.hpp586 行定义.


该类的文档由以下文件生成: