acl  3.5.3.0
acl_xml2.h 文件参考
+ acl_xml2.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

struct  ACL_XML2_ATTR
 
struct  ACL_XML2_NODE
 
struct  ACL_XML2
 

宏定义

#define ACL_XML2_F_META_QM   (1 << 0)
 
#define ACL_XML2_F_META_CM   (1 << 1)
 
#define ACL_XML2_F_META_EM   (1 << 2)
 
#define ACL_XML2_F_SELF_CL   (1 << 3)
 
#define ACL_XML2_F_LEAF   (1 << 4)
 
#define ACL_XML2_F_CDATA   (1 << 5)
 
#define ACL_XML2_F_META   (ACL_XML2_F_META_QM | ACL_XML2_F_META_CM | ACL_XML2_F_META_EM)
 
#define ACL_XML2_IS_COMMENT(x)   (((x)->flag & ACL_XML2_F_META_CM))
 
#define ACL_XML2_IS_CDATA(x)   (((x)->flag & ACL_XML2_F_CDATA))
 
#define ACL_XML2_S_NXT   0
 
#define ACL_XML2_S_LLT   1
 
#define ACL_XML2_S_LGT   2
 
#define ACL_XML2_S_LCH   3
 
#define ACL_XML2_S_LEM   4
 
#define ACL_XML2_S_LTAG   5
 
#define ACL_XML2_S_RLT   6
 
#define ACL_XML2_S_RGT   7
 
#define ACL_XML2_S_RTAG   8
 
#define ACL_XML2_S_ATTR   9
 
#define ACL_XML2_S_AVAL   10
 
#define ACL_XML2_S_TXT   11
 
#define ACL_XML2_S_MTAG   12
 
#define ACL_XML2_S_MTXT   13
 
#define ACL_XML2_S_MCMT   14
 
#define ACL_XML2_S_MEND   15
 
#define ACL_XML2_S_CDATA   16
 
#define ACL_XML2_FLAG_MULTI_ROOT   (1 << 0)
 
#define ACL_XML2_FLAG_IGNORE_SLASH   (1 << 1)
 
#define ACL_XML2_FLAG_XML_DECODE   (1 << 2)
 
#define ACL_XML2_FLAG_XML_ENCODE   (1 << 3)
 
#define acl_xml2_parse   acl_xml2_update
 

类型定义

typedef struct ACL_XML2 ACL_XML2
 
typedef struct ACL_XML2_NODE ACL_XML2_NODE
 
typedef struct ACL_XML2_ATTR ACL_XML2_ATTR
 

函数

ACL_API int acl_xml2_is_closure (ACL_XML2 *xml)
 
ACL_API int acl_xml2_is_complete (ACL_XML2 *xml, const char *tag)
 
ACL_API ACL_XML2acl_xml2_alloc (ACL_VSTRING *vbuf)
 
ACL_API ACL_XML2acl_xml2_dbuf_alloc (ACL_VSTRING *vbuf, ACL_DBUF_POOL *dbuf)
 
ACL_API ACL_XML2acl_xml2_mmap_file (const char *filepath, size_t max_len, size_t init_len, ACL_DBUF_POOL *dbuf)
 
ACL_API ACL_XML2acl_xml2_mmap_fd (ACL_FILE_HANDLE fd, size_t max_len, size_t init_len, ACL_DBUF_POOL *dbuf)
 
ACL_API size_t acl_xml2_space (ACL_XML2 *xml)
 
ACL_API void acl_xml2_space_clear (ACL_XML2 *xml)
 
ACL_API void acl_xml2_foreach_init (ACL_XML2 *xml, ACL_XML2_NODE *node)
 
ACL_API void acl_xml2_multi_root (ACL_XML2 *xml, int on)
 
ACL_API void acl_xml2_slash (ACL_XML2 *xml, int ignore)
 
ACL_API void acl_xml2_decode_enable (ACL_XML2 *xml, int on)
 
ACL_API void acl_xml2_encode_enable (ACL_XML2 *xml, int on)
 
ACL_API int acl_xml2_free (ACL_XML2 *xml)
 
ACL_API void acl_xml2_reset (ACL_XML2 *xml)
 
ACL_API const char * acl_xml2_update (ACL_XML2 *xml, const char *data)
 
ACL_API void acl_xml2_tag_init (void)
 
ACL_API void acl_xml2_tag_add (const char *tag)
 
ACL_API int acl_xml2_tag_selfclosed (const char *tag)
 
ACL_API int acl_xml2_tag_leaf (const char *tag)
 
ACL_API void acl_xml2_free_array (ACL_ARRAY *a)
 
ACL_API ACL_XML2_NODEacl_xml2_getFirstElementByTagName (ACL_XML2 *xml, const char *tag)
 
ACL_API ACL_ARRAYacl_xml2_getElementsByTagName (ACL_XML2 *xml, const char *tag)
 
ACL_API ACL_ARRAYacl_xml2_getElementsByTags (ACL_XML2 *xml, const char *tags)
 
ACL_API ACL_ARRAYacl_xml2_getElementsByName (ACL_XML2 *xml, const char *value)
 
ACL_API ACL_ARRAYacl_xml2_getElementsByAttr (ACL_XML2 *xml, const char *name, const char *value)
 
ACL_API ACL_XML2_ATTRacl_xml2_getAttrById (ACL_XML2 *xml, const char *id)
 
ACL_API const char * acl_xml2_getAttrValueById (ACL_XML2 *xml, const char *id)
 
ACL_API ACL_XML2_NODEacl_xml2_getElementById (ACL_XML2 *xml, const char *id)
 
ACL_API ACL_XML2_NODEacl_xml2_getElementMeta (ACL_XML2 *xml, const char *tag)
 
ACL_API const char * acl_xml2_getEncoding (ACL_XML2 *xml)
 
ACL_API const char * acl_xml2_getType (ACL_XML2 *xml)
 
ACL_API ACL_XML2_ATTRacl_xml2_getElementAttr (ACL_XML2_NODE *node, const char *name)
 
ACL_API const char * acl_xml2_getElementAttrVal (ACL_XML2_NODE *node, const char *name)
 
ACL_API int acl_xml2_removeElementAttr (ACL_XML2_NODE *node, const char *name)
 
ACL_API ACL_XML2_ATTRacl_xml2_addElementAttr (ACL_XML2_NODE *node, const char *name, const char *value)
 
ACL_API ACL_XML2_NODEacl_xml2_create_node (ACL_XML2 *xml, const char *tagname, const char *text)
 
ACL_API ACL_XML2_NODEacl_xml2_create_node_with_text_stream (ACL_XML2 *xml, const char *tag, ACL_VSTREAM *in, size_t off, size_t len)
 
ACL_API ACL_XML2_ATTRacl_xml2_node_add_attr (ACL_XML2_NODE *node, const char *name, const char *value)
 
ACL_API void acl_xml2_node_add_attrs (ACL_XML2_NODE *node,...)
 
ACL_API void acl_xml2_node_set_text (ACL_XML2_NODE *node, const char *text)
 
ACL_API void acl_xml2_node_add_text (ACL_XML2_NODE *node, const char *text)
 
ACL_API void acl_xml2_node_set_text_stream (ACL_XML2_NODE *node, ACL_VSTREAM *in, size_t off, size_t len)
 
ACL_API const char * acl_xml2_build (ACL_XML2 *xml)
 
ACL_API const char * acl_xml2_build2 (const ACL_XML2 *xml, ACL_VSTRING *vbuf)
 
ACL_API void acl_xml2_dump (ACL_XML2 *xml, ACL_VSTREAM *fp)
 
ACL_API void acl_xml2_dump2 (ACL_XML2 *xml, ACL_VSTRING *buf)
 
ACL_API ACL_XML2_ATTRacl_xml2_attr_alloc (ACL_XML2_NODE *node)
 
ACL_API ACL_XML2_NODEacl_xml2_node_alloc (ACL_XML2 *xml)
 
ACL_API int acl_xml2_node_delete (ACL_XML2_NODE *node)
 
ACL_API void acl_xml2_node_append (ACL_XML2_NODE *node1, ACL_XML2_NODE *node2)
 
ACL_API void acl_xml2_node_add_child (ACL_XML2_NODE *parent, ACL_XML2_NODE *child)
 
ACL_API ACL_XML2_NODEacl_xml2_node_parent (ACL_XML2_NODE *node)
 
ACL_API ACL_XML2_NODEacl_xml2_node_next (ACL_XML2_NODE *node)
 
ACL_API ACL_XML2_NODEacl_xml2_node_prev (ACL_XML2_NODE *node)
 

宏定义说明

◆ ACL_XML2_F_CDATA

#define ACL_XML2_F_CDATA   (1 << 5)

CDATA data 是否是元数据

在文件 acl_xml2.h64 行定义.

◆ ACL_XML2_F_LEAF

#define ACL_XML2_F_LEAF   (1 << 4)

leaf node has no child node

在文件 acl_xml2.h63 行定义.

◆ ACL_XML2_F_META

#define ACL_XML2_F_META   (ACL_XML2_F_META_QM | ACL_XML2_F_META_CM | ACL_XML2_F_META_EM)

在文件 acl_xml2.h67 行定义.

◆ ACL_XML2_F_META_CM

#define ACL_XML2_F_META_CM   (1 << 1)

'!–' flag

在文件 acl_xml2.h60 行定义.

◆ ACL_XML2_F_META_EM

#define ACL_XML2_F_META_EM   (1 << 2)

only '!' flag

在文件 acl_xml2.h61 行定义.

◆ ACL_XML2_F_META_QM

#define ACL_XML2_F_META_QM   (1 << 0)

'?' flag

在文件 acl_xml2.h59 行定义.

◆ ACL_XML2_F_SELF_CL

#define ACL_XML2_F_SELF_CL   (1 << 3)

self closed flag

在文件 acl_xml2.h62 行定义.

◆ ACL_XML2_FLAG_IGNORE_SLASH

#define ACL_XML2_FLAG_IGNORE_SLASH   (1 << 1)

解析 xml 对象时是否需要对数据进行 xml 解码

在文件 acl_xml2.h132 行定义.

◆ ACL_XML2_FLAG_MULTI_ROOT

#define ACL_XML2_FLAG_MULTI_ROOT   (1 << 0)

是否兼容单节点中没有 '/' 情况

在文件 acl_xml2.h129 行定义.

◆ ACL_XML2_FLAG_XML_DECODE

#define ACL_XML2_FLAG_XML_DECODE   (1 << 2)

创建 xml 对象时是否需要对数据进行 xml 编码

在文件 acl_xml2.h135 行定义.

◆ ACL_XML2_FLAG_XML_ENCODE

#define ACL_XML2_FLAG_XML_ENCODE   (1 << 3)

在文件 acl_xml2.h138 行定义.

◆ ACL_XML2_IS_CDATA

#define ACL_XML2_IS_CDATA (   x)    (((x)->flag & ACL_XML2_F_CDATA))

在文件 acl_xml2.h72 行定义.

◆ ACL_XML2_IS_COMMENT

#define ACL_XML2_IS_COMMENT (   x)    (((x)->flag & ACL_XML2_F_META_CM))

在文件 acl_xml2.h70 行定义.

◆ acl_xml2_parse

#define acl_xml2_parse   acl_xml2_update

在文件 acl_xml2.h296 行定义.

◆ ACL_XML2_S_ATTR

#define ACL_XML2_S_ATTR   9

标签属性名

在文件 acl_xml2.h84 行定义.

◆ ACL_XML2_S_AVAL

#define ACL_XML2_S_AVAL   10

标签属性值

在文件 acl_xml2.h85 行定义.

◆ ACL_XML2_S_CDATA

#define ACL_XML2_S_CDATA   16

CDATA 数据

在文件 acl_xml2.h91 行定义.

◆ ACL_XML2_S_LCH

#define ACL_XML2_S_LCH   3

左边 '<' 后第一个字节

在文件 acl_xml2.h78 行定义.

◆ ACL_XML2_S_LEM

#define ACL_XML2_S_LEM   4

左边 '<' 后的 '!'

在文件 acl_xml2.h79 行定义.

◆ ACL_XML2_S_LGT

#define ACL_XML2_S_LGT   2

右边 '>'

在文件 acl_xml2.h77 行定义.

◆ ACL_XML2_S_LLT

#define ACL_XML2_S_LLT   1

左边 '<'

在文件 acl_xml2.h76 行定义.

◆ ACL_XML2_S_LTAG

#define ACL_XML2_S_LTAG   5

左边的标签名

在文件 acl_xml2.h80 行定义.

◆ ACL_XML2_S_MCMT

#define ACL_XML2_S_MCMT   14

元数据注释

在文件 acl_xml2.h89 行定义.

◆ ACL_XML2_S_MEND

#define ACL_XML2_S_MEND   15

元数据结束

在文件 acl_xml2.h90 行定义.

◆ ACL_XML2_S_MTAG

#define ACL_XML2_S_MTAG   12

元数据标签

在文件 acl_xml2.h87 行定义.

◆ ACL_XML2_S_MTXT

#define ACL_XML2_S_MTXT   13

元数据文本

在文件 acl_xml2.h88 行定义.

◆ ACL_XML2_S_NXT

#define ACL_XML2_S_NXT   0

下一个节点

在文件 acl_xml2.h75 行定义.

◆ ACL_XML2_S_RGT

#define ACL_XML2_S_RGT   7

右边的 '>'

在文件 acl_xml2.h82 行定义.

◆ ACL_XML2_S_RLT

#define ACL_XML2_S_RLT   6

右边的 '<'

在文件 acl_xml2.h81 行定义.

◆ ACL_XML2_S_RTAG

#define ACL_XML2_S_RTAG   8

右边的标签名

在文件 acl_xml2.h83 行定义.

◆ ACL_XML2_S_TXT

#define ACL_XML2_S_TXT   11

节点文本

在文件 acl_xml2.h86 行定义.

类型定义说明

◆ ACL_XML2

typedef struct ACL_XML2 ACL_XML2

在文件 acl_xml2.h16 行定义.

◆ ACL_XML2_ATTR

typedef struct ACL_XML2_ATTR ACL_XML2_ATTR

在文件 acl_xml2.h18 行定义.

◆ ACL_XML2_NODE

typedef struct ACL_XML2_NODE ACL_XML2_NODE

在文件 acl_xml2.h17 行定义.

函数说明

◆ acl_xml2_addElementAttr()

ACL_API ACL_XML2_ATTR* acl_xml2_addElementAttr ( ACL_XML2_NODE node,
const char *  name,
const char *  value 
)

给 xml 节点添加属性, 如果该属性名已存在, 则用新的属性值替换其属性值, 否则 创建并添加新的属性对象

参数
node{ACL_XML2_NODE*} xml 节点
name{const char*} 属性名称
value{const char*} 属性值
返回
{ACL_XML2_ATTR*} 返回该属性对象(有可能是原来的, 也有可能是新的), 返回值不需释放

◆ acl_xml2_alloc()

ACL_API ACL_XML2* acl_xml2_alloc ( ACL_VSTRING vbuf)

创建一个 xml 对象

参数
vbuf{ACL_VSTRING*} 内存映射缓冲区对象
返回
{ACL_XML2*} 新创建的 xml 对象

◆ acl_xml2_attr_alloc()

ACL_API ACL_XML2_ATTR* acl_xml2_attr_alloc ( ACL_XML2_NODE node)

创建 xml 节点的属性

参数
node{ACL_XML2_NODE*} xml 节点
返回
{ACL_XML2_ATTR*} 新创建的节点属性

◆ acl_xml2_build()

ACL_API const char* acl_xml2_build ( ACL_XML2 xml)

将 xml 对象转成字符串内容

参数
xml{ACL_XML2*} xml 对象
返回
{const char*} 返回转换后字符串的起始地址

◆ acl_xml2_build2()

ACL_API const char* acl_xml2_build2 ( const ACL_XML2 xml,
ACL_VSTRING vbuf 
)

将 xml 对象转成字符串内容

参数
xml{const ACL_XML2*} xml 对象
vbuf{ACL_VSTRING*} 存储结果
返回
{const char*} 返回转换后字符串的起始地址

◆ acl_xml2_create_node()

ACL_API ACL_XML2_NODE* acl_xml2_create_node ( ACL_XML2 xml,
const char *  tagname,
const char *  text 
)

将标签名及节点文本做为参数创建 xml 节点,该函数主要用在构建 xml 对象时

参数
xml{ACL_XML2*} xml 对象,该对象应该是由 acl_xml2_alloc 创建的
tagname{const char*} 标签名,必须非空且字符串长度大于 0
text{const char*} 节点的文本内容,可以为空
返回
{ACL_XML2_NODE*} 新创建的 xml 节点,该返回永远返回非空,如果输入 参数非法则会导致内部自动产生断言

◆ acl_xml2_create_node_with_text_stream()

ACL_API ACL_XML2_NODE* acl_xml2_create_node_with_text_stream ( ACL_XML2 xml,
const char *  tag,
ACL_VSTREAM in,
size_t  off,
size_t  len 
)

创建 xml 节点,使用文件流做为节点的文本内容项,同时会自动进行 XML 编码处理

参数
xml{ACL_XML2*} xml 对象
tag{const char*} 标签名,非 NULL 字符串
in{ACL_VSTREAM *} 输入流,非 NULL 时,其中内容将做为 xml 节点的文本内容
off{size_t} 当 in 为文件流时指定所拷贝内容在文件中的起始位置
len{size_t} 指定从输入流中拷贝的最大数据长度,当为 0 时则一直拷贝至流结束
返回
{ACL_XML2_NODE*} 返回新创建的 xml 节点,永远返回非 NULL 对象, 如果输入参数非法则内部产生断言

◆ acl_xml2_dbuf_alloc()

ACL_API ACL_XML2* acl_xml2_dbuf_alloc ( ACL_VSTRING vbuf,
ACL_DBUF_POOL dbuf 
)

创建一个 xml 对象,该 xml 对象及所有的内部内存分配都在该内存池上进行分配

参数
vbuf{ACL_VSTRING*} 内存映射缓冲区对象
dbuf{ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 xml 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 xml 的内存池
返回
{ACL_XML2*} 新创建的 xml 对象

◆ acl_xml2_decode_enable()

ACL_API void acl_xml2_decode_enable ( ACL_XML2 xml,
int  on 
)

解析 xml 对象时是否对属性值及文本值进行 xml 解码,内部缺省解码

参数
xml{ACL_XML2*}
on{int} 非 0 表示进行 xml 解码

◆ acl_xml2_dump()

ACL_API void acl_xml2_dump ( ACL_XML2 xml,
ACL_VSTREAM fp 
)

将 xml 对象转储于指定流中,注:该转储信息仅为调试用的数据

参数
xml{ACL_XML2*} xml 对象
fp{ACL_VSTREAM*} 流对象

◆ acl_xml2_dump2()

ACL_API void acl_xml2_dump2 ( ACL_XML2 xml,
ACL_VSTRING buf 
)

将 xml 对象转存于指定缓冲区中,注:该转储信息仅为调试用的数据

参数
xml{ACL_XML2*} xml 对象
buf{ACL_VSTRING*} 缓冲区, 需要用户自己分配空间

◆ acl_xml2_encode_enable()

ACL_API void acl_xml2_encode_enable ( ACL_XML2 xml,
int  on 
)

创建 xml 对象时是否对属性值及文本值进行 xml 编码,内部缺省编码

◆ acl_xml2_foreach_init()

ACL_API void acl_xml2_foreach_init ( ACL_XML2 xml,
ACL_XML2_NODE node 
)

将某一个 ACL_XML2_NODE 节点作为一个 XML 对象的根节点,从而可以方便地遍历出该 节点各级子节点(在遍历过程中的所有节点不含本节点自身),该遍历方式有别于单独 遍历某一个 ACL_XML2_NODE 节点时仅能遍历其一级子节点的情形

参数
xml{ACL_XML2*} xml 对象
node{ACL_XML2_NODE*} AXL_XML_NODE 节点

◆ acl_xml2_free()

ACL_API int acl_xml2_free ( ACL_XML2 xml)

释放一个 xml 对象, 同时释放该对象里容纳的所有 xml 节点

参数
xml{ACL_XML2*} xml 对象
返回
{int} 返回释放的 xml 节点个数

◆ acl_xml2_free_array()

ACL_API void acl_xml2_free_array ( ACL_ARRAY a)

释放由 acl_xml2_getElementsByTagName, acl_xml2_getElementsByName, acl_xml2_getElementsByAttr 等函数返回的动态数组对象, 因为该动态数组中的 元素都是 ACL_XML2 对象中元素的引用, 所以释放掉该动态数组后, 只要 ACL_XML2 对象不释放, 则原来存于该数组中的元素依然可以使用. 但并不释放里面的 xml 节点元素

参数
a{ACL_ARRAY*} 动态数组对象

◆ acl_xml2_getAttrById()

ACL_API ACL_XML2_ATTR* acl_xml2_getAttrById ( ACL_XML2 xml,
const char *  id 
)

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

参数
xml{ACL_XML2*} xml 对象
id{const char*} id 值
返回
{ACL_XML2_ATTR*} 某 xml 节点的某个属性对象, 若返回 NULL 则表示 没有符合条件的属性, 返回值不需要释放

◆ acl_xml2_getAttrValueById()

ACL_API const char* acl_xml2_getAttrValueById ( ACL_XML2 xml,
const char *  id 
)

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

参数
xml{ACL_XML2*} xml 对象
id{const char*} id 值
返回
{const char*} 某 xml 节点的某个属性值, 若返回 NULL 则表示没有符合 条件的属性

◆ acl_xml2_getElementAttr()

ACL_API ACL_XML2_ATTR* acl_xml2_getElementAttr ( ACL_XML2_NODE node,
const char *  name 
)

从 xml 节点中获得指定属性名的属性对象

参数
node{ACL_XML2_NODE*} xml 节点
name{const char*} 属性名称
返回
{ACL_XML2_ATTR*} 属性对象, 为空表示不存在, 返回值不需要释放

◆ acl_xml2_getElementAttrVal()

ACL_API const char* acl_xml2_getElementAttrVal ( ACL_XML2_NODE node,
const char *  name 
)

从 xml 节点中获得指定属性名的属性值

参数
node{ACL_XML2_NODE*} xml 节点
name{const char*} 属性名称
返回
{const char*} 属性值, 为空表示不存在

◆ acl_xml2_getElementById()

ACL_API ACL_XML2_NODE* acl_xml2_getElementById ( ACL_XML2 xml,
const char *  id 
)

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

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

◆ acl_xml2_getElementMeta()

ACL_API ACL_XML2_NODE* acl_xml2_getElementMeta ( ACL_XML2 xml,
const char *  tag 
)

从 xml 对象中提取有在 ? ! 等开头的节点

参数
xml{ACL_XML2*} xml 对象
tag{const char*} 标签名
返回
{ACL_XML2_NODE*} xml 节点元素, 若返回 NULL 则表示没有符合 条件的 xml 节点, 返回值不需要释放

◆ acl_xml2_getElementsByAttr()

ACL_API ACL_ARRAY* acl_xml2_getElementsByAttr ( ACL_XML2 xml,
const char *  name,
const char *  value 
)

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

参数
xml{ACL_XML2*} xml 对象
name{const char*} 属性名
value{const char*} 属性值
返回
{ACL_ARRAY*} 符合条件的 xml 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 xml 节点, 非空值需要调用 acl_xml2_free_array 释放

◆ acl_xml2_getElementsByName()

ACL_API ACL_ARRAY* acl_xml2_getElementsByName ( ACL_XML2 xml,
const char *  value 
)

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

参数
xml{ACL_XML2*} xml 对象
value{const char*} 属性名为 name 的属性值
返回
{ACL_ARRAY*} 符合条件的 xml 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 xml 节点, 非空值需要调用 acl_xml2_free_array 释放

◆ acl_xml2_getElementsByTagName()

ACL_API ACL_ARRAY* acl_xml2_getElementsByTagName ( ACL_XML2 xml,
const char *  tag 
)

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

参数
xml{ACL_XML2*} xml 对象
tag{const char*} 标签名称
返回
{ACL_ARRAY*} 符合条件的 xml 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 xml 节点, 非空值需要调用 acl_xml2_free_array 释放

◆ acl_xml2_getElementsByTags()

ACL_API ACL_ARRAY* acl_xml2_getElementsByTags ( ACL_XML2 xml,
const char *  tags 
)

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

参数
xml{ACL_XML2*} 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 一次性查出所有符合条件的节点
返回
{ACL_ARRAY*} 符合条件的 xml 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 xml 节点, 非空值需要调用 acl_xml2_free_array 释放

◆ acl_xml2_getEncoding()

ACL_API const char* acl_xml2_getEncoding ( ACL_XML2 xml)

获得 xml 的字符集编码格式

参数
xml{ACL_XML2*} xml 对象
返回
{const char*} 返回字符集编码格式,返回 NULL 时表示没有该属性

◆ acl_xml2_getFirstElementByTagName()

ACL_API ACL_XML2_NODE* acl_xml2_getFirstElementByTagName ( ACL_XML2 xml,
const char *  tag 
)

从 xml 对象中获得与所给标签名相同的 xml 第一个节点

参数
xml{ACL_XML2*} xml 对象
tag{const char*} 标签名称
返回
{ACL_XML2_NODE*} 符合条件的 xml 节点, 若返回 NULL 则 表示没有符合条件的 xml 节点

◆ acl_xml2_getType()

ACL_API const char* acl_xml2_getType ( ACL_XML2 xml)

获得 xml 数据的类型,如:text/xsl

参数
xml{ACL_XML2*} xml 对象
返回
{const char*} 返回 NULL 表示没有该属性

◆ acl_xml2_is_closure()

ACL_API int acl_xml2_is_closure ( ACL_XML2 xml)

判断 xml 对象是否闭合的, 即是否所解析的数据是否完整, 如果该 xml 对象里的 xml 节点元素为空, 则也认为不是闭合的

参数
xml{ACL_XML2*} xml 对象
返回
{int} 0: 否; 1: 是

◆ acl_xml2_is_complete()

ACL_API int acl_xml2_is_complete ( ACL_XML2 xml,
const char *  tag 
)

根据指定标签名判断 xml 解析已经完成, 当该标签与 xml 对象中 root 一级子节点 中的最后一个 xml 节点的标签相同时, 则认为 xml 解析完成, 为保证判断的正确性, 数据源应保证最外层的根节点只有一个, 即 xml->root 的一级子节点只有一个, 否则 会造成误判

参数
xml{ACL_XML2*} xml 对象
tag{const char*} 用户给定标签名, 内部在匹配时不区分大小写
返回
{int} 0: 否; 1: 是

◆ acl_xml2_mmap_fd()

ACL_API ACL_XML2* acl_xml2_mmap_fd ( ACL_FILE_HANDLE  fd,
size_t  max_len,
size_t  init_len,
ACL_DBUF_POOL dbuf 
)

创建一个 xml 对象,其 xml 节点的创建的内存区建立在内存映射文件上

参数
fd{ACL_FILE_HANDLE} 内存映射文件的文件句柄,当创建 xml 对象成功后, 该句柄需在 xml 对象释放后才关闭
max_len{size_t} 所映射的文件大小
init_len{size_t} 映射内存初始化时的大小
dbuf{ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 xml 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 xml 的内存池
返回
{ACL_XML2*} 新创建的 xml 对象

◆ acl_xml2_mmap_file()

ACL_API ACL_XML2* acl_xml2_mmap_file ( const char *  filepath,
size_t  max_len,
size_t  init_len,
ACL_DBUF_POOL dbuf 
)

创建一个 xml 对象,其 xml 节点的创建的内存区建立在内存映射文件上

参数
filepath{const char*} 内存映射文件的文件名
max_len{size_t} 所映射的文件大小
init_len{size_t} 映射内存初始化时的大小
dbuf{ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 xml 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 xml 的内存池
返回
{ACL_XML2*} 新创建的 xml 对象

◆ acl_xml2_multi_root()

ACL_API void acl_xml2_multi_root ( ACL_XML2 xml,
int  on 
)

设置一个 xml 文档中是否允许有多个根 xml 节点,内部缺省支持多个根节点

参数
xml{ACL_XML2*} xml 对象
on{int} 非 0 则允许,为 0 表示不允许,当禁止有多个根 xml 节点时, 则在解析时当遇到第一个根节点结束时便返回剩余的数据

◆ acl_xml2_node_add_attr()

ACL_API ACL_XML2_ATTR* acl_xml2_node_add_attr ( ACL_XML2_NODE node,
const char *  name,
const char *  value 
)

给一个 xml 节点添加属性,该函数主要用在构建 xml 对象时

参数
node{ACL_XML2_NODE*} 由 acl_xml2_create_node 创建的节点
name{const char*} 属性名,必须为非空字符串且字符串长度大于 0
value{const char*} 属性值,可以为空
返回
{ACL_XML2_ATTR*} xml 节点的属性对象,当输入参数非法时该函数 内部自动产生断言

◆ acl_xml2_node_add_attrs()

ACL_API void acl_xml2_node_add_attrs ( ACL_XML2_NODE node,
  ... 
)

给一个 xml 节点添加一组属性,该函数主要用在构建 xml 对象时

参数
node{ACL_XML2_NODE*} 由 acl_xml2_create_node 创建的节点
...一组属性,遇到 NULL 时表示结束,如: {name1}, {value1}, {name2}, {value2}, ... NULL

◆ acl_xml2_node_add_child()

ACL_API void acl_xml2_node_add_child ( ACL_XML2_NODE parent,
ACL_XML2_NODE child 
)

将某个 xml 节点作为子节点加入某父 xml 节点中

参数
parent{ACL_XML2_NODE*} 父节点
child{ACL_XML2_NODE*} 子节点

◆ acl_xml2_node_add_text()

ACL_API void acl_xml2_node_add_text ( ACL_XML2_NODE node,
const char *  text 
)

给一个 xml 节点的文本追加内容,该函数主要用在构建 xml 对象时,在该节点的文本内容上 追加新的文本内容

参数
node{ACL_XML2_NODE*} 由 acl_xml2_create_node 创建的节点
text{const char*} 文本内容

◆ acl_xml2_node_alloc()

ACL_API ACL_XML2_NODE* acl_xml2_node_alloc ( ACL_XML2 xml)

创建一个 xml 节点

参数
xml{ACL_XML2*} xml 对象
返回
{ACL_XML2_NODE*} xml 节点对象

◆ acl_xml2_node_append()

ACL_API void acl_xml2_node_append ( ACL_XML2_NODE node1,
ACL_XML2_NODE node2 
)

向某个 xml 节点添加兄弟节点(该兄弟节点必须是独立的 xml 节点)

参数
node1{ACL_XML2_NODE*} 向本节点添加 xml 节点
node2{ACL_XML2_NODE*} 新添加的兄弟 xml 节点

◆ acl_xml2_node_delete()

ACL_API int acl_xml2_node_delete ( ACL_XML2_NODE node)

将某个 xml 节点及其子节点从 xml 对象中删除, 并释放该节点及其子节点所占空间 函数来释放该 xml 节点所占内存

参数
node{ACL_XML2_NODE*} xml 节点
返回
{int} 返回删除的节点个数

◆ acl_xml2_node_next()

ACL_API ACL_XML2_NODE* acl_xml2_node_next ( ACL_XML2_NODE node)

获得某个 xml 节点的后一个兄弟节点

参数
node{ACL_XML2_NODE*} xml 节点
返回
{ACL_XML2_NODE*} 给定 xml 节点的后一个兄弟节点, 若为NULL则表示不存在

◆ acl_xml2_node_parent()

ACL_API ACL_XML2_NODE* acl_xml2_node_parent ( ACL_XML2_NODE node)

获得某个 xml 节点的父节点

参数
node{ACL_XML2_NODE*} xml 节点
返回
{ACL_XML2_NODE*} 父节点, 如果为 NULL 则表示其父节点不存在

◆ acl_xml2_node_prev()

ACL_API ACL_XML2_NODE* acl_xml2_node_prev ( ACL_XML2_NODE node)

获得某个 xml 节点的前一个兄弟节点

参数
node{ACL_XML2_NODE*} xml 节点
返回
{ACL_XML2_NODE*} 给定 xml 节点的前一个兄弟节点, 若为NULL则表示不存在

◆ acl_xml2_node_set_text()

ACL_API void acl_xml2_node_set_text ( ACL_XML2_NODE node,
const char *  text 
)

给一个 xml 节点添加文本内容,该函数主要用在构建 xml 对象时,当该节点之前有文本内容时 则用新文本覆盖原文本

参数
node{ACL_XML2_NODE*} 由 acl_xml2_create_node 创建的节点
text{const char*} 文本内容

◆ acl_xml2_node_set_text_stream()

ACL_API void acl_xml2_node_set_text_stream ( ACL_XML2_NODE node,
ACL_VSTREAM in,
size_t  off,
size_t  len 
)

用文件流中的内容给一个 xml 节点添加文本内容

参数
node{ACL_XML2_NODE*} 由 acl_xml2_create_node 创建的节点
in{ACL_VSTREAM*} 输入流对象
off{size_t} 当 in 为文件流,指定在文件中的起始位置
len{size_t} 要拷贝的最大数据长度,当为 0 时则一直拷贝至流结束

◆ acl_xml2_removeElementAttr()

ACL_API int acl_xml2_removeElementAttr ( ACL_XML2_NODE node,
const char *  name 
)

从 xml 节点删除某个属性对象, 如果该属性为 id 属性, 则同时会从 xml->id_table 中删除

参数
node{ACL_XML2_NODE*} xml 节点
name{const char*} 属性名称
返回
{int} 0 表示删除成功, -1: 表示删除失败(有可能是该属性不存在)

◆ acl_xml2_reset()

ACL_API void acl_xml2_reset ( ACL_XML2 xml)

重置 XML 解析器对象

参数
xml{ACL_XML2*} xml 对象

◆ acl_xml2_slash()

ACL_API void acl_xml2_slash ( ACL_XML2 xml,
int  ignore 
)

对于 XML 单节点的情况, 是否允许可以没有 /, 如: <test id="111">, <test id="111">, 当可以允许没有 / 则这两种写法 都是合法的,否则只有第二个写法是合法的,如果允许这种兼容性,则 会造成一定的性能损失

参数
xml{ACL_XML2*} xml 对象
ignore{int} 如果非 0 表示单节点必须有 /

◆ acl_xml2_space()

ACL_API size_t acl_xml2_space ( ACL_XML2 xml)

获得当前 xml 对象内部已经分配的内存空间大小

参数
xml{ACL_XML2*}
返回
{size_t} 当前 xml 对象内部已分配的内存大小

◆ acl_xml2_space_clear()

ACL_API void acl_xml2_space_clear ( ACL_XML2 xml)

将 xml 对象内部记录内存大小的变量清 0

参数
xml{ACL_XML2*}

◆ acl_xml2_tag_add()

ACL_API void acl_xml2_tag_add ( const char *  tag)

允许用户自己添加一些非自闭合的标签

参数
tag{const char*} 标签名,注意标签长度不得大于 254 个字节

◆ acl_xml2_tag_init()

ACL_API void acl_xml2_tag_init ( void  )

初始化类似于 input, br, hr 等的自闭合标签, 形成自闭合标签树, 以便于 acl_xml2_tag_selfclosed 查询该树, 检查所给标签是否是保留的自闭合标签, 该函数只能被初始化一次, 也可以不初始化

◆ acl_xml2_tag_leaf()

ACL_API int acl_xml2_tag_leaf ( const char *  tag)

判断标签所属 xml 节点是否是叶节点, 叶节点没有子节点

参数
tag{const char*} 标签名
返回
{int} 0: 不是叶节点; 1: 是叶节点

◆ acl_xml2_tag_selfclosed()

ACL_API int acl_xml2_tag_selfclosed ( const char *  tag)

当调用 acl_xml2_tag_init 初始化保留的自闭合标签树后, 可以调用此函数判断所给 标签是否属于自闭合标签, 如果未调用 acl_xml2_tag_init, 则该函数永远返回 0 @parma tag {const char*} 标签名称

返回
{int} 0: 表示否, 1: 表示是

◆ acl_xml2_update()

ACL_API const char* acl_xml2_update ( ACL_XML2 xml,
const char *  data 
)

解析 xml 数据, 并持续地自动生成 xml 节点树

参数
xml{ACL_XML2*} xml 对象
data{const char*} 以 '\0' 结尾的数据字符串, 可以是完整的 xml 数据; 也可以是不完整的 xml 数据, 允许循环调用此函数, 将不完整数据持续地输入
返回
{const char*} 当通过 acl_xml2_multi_root 允许一个 xml 文档中在在 多个根 xml 节点时,该函数返回的地址的字节为 '\0'; 否则返回剩余的数据地址 包含非空字符串 注:也可以通过 acl_xml2_is_complete 判断是否解析完毕