xml.h
上传用户:szjkjd
上传日期:2022-06-27
资源大小:8968k
文件大小:10k
源码类别:

浏览器

开发平台:

Visual C++

  1. /***********************************************************************
  2.  *
  3.  * 注意:
  4.  *     1. 所有函数参数、返回值的字符串都应该是UTF-8的格式
  5.  *     2. 执行xml_select_nodes之后,如果再执行除
  6.  *        xml_read_set_prop、xml_read_set_content、
  7.  *        xml_write_set_prop、xml_write_set_content之外的函数,
  8.  *        结构体中的上下文信息会被破坏。
  9.  *
  10.  *                                      作者:庾庆达    日期:2008-8-1
  11. ***********************************************************************/
  12. #ifndef _LIB_DB_XML_H_
  13. #define _LIB_DB_XML_H_
  14. #include "libxmlxpath.h"
  15. #include "libxmlparser.h"
  16. #include "list.h"
  17. typedef struct _XMLStr TXMLStr;
  18. struct _XMLStr
  19. {
  20.         FIFO_ENTRY(TXMLStr) node;
  21.         char *str;
  22. };
  23. typedef struct _XML TXML;
  24. struct _XML
  25. {
  26.         xmlDocPtr doc;
  27.         char *filename;
  28.         char *encoding;
  29.         xmlXPathObjectPtr object;
  30.         FIFO(TXMLStr) rubbish;
  31. };
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. /***********************************************************************
  36.  * 功能: 创建新的xml实例
  37.  * @filename    : 文件路径, 该参数可以为NULL
  38.  * @encoding    : XML文件编码
  39.  * @root        : 根节点名称
  40.  * 返回值       : 成功返回xml实例, 失败返回NULL
  41.  **********************************************************************/
  42. TXML *xml_create(const char *filename, const char *encoding, const char *root);
  43. /***********************************************************************
  44.  * 功能: 读取xml文件
  45.  * @filename    : 文件路径
  46.  * 返回值       : 成功返回xml实例, 失败返回NULL
  47.  **********************************************************************/
  48. TXML *xml_create_file(const char *filename);
  49. /***********************************************************************
  50.  * 功能: 从内存中加载xml
  51.  * @buffer      : xml所在缓冲区
  52.  * @size        : buffer大小
  53.  * 返回值       : 成功返回xml实例, 失败返回NULL
  54.  **********************************************************************/
  55. TXML *xml_create_memory(const char *buffer, size_t size);
  56. /***********************************************************************
  57.  * 功能: 内存清理.(该函数会被xml_free调用)
  58.  * @xml         : xml实例
  59.  **********************************************************************/
  60. void xml_cleanup(TXML *xml);
  61. /***********************************************************************
  62.  * 功能: 释放xml实例.
  63.  * @xml         : xml实例
  64.  **********************************************************************/
  65. void xml_close(TXML *xml);
  66. /***********************************************************************
  67.  * 功能: 保存xml实例到文件中
  68.  * @xml         : xml实例
  69.  * 返回值       : 0 - 成功, other - 失败
  70.  * 注意         : 不能用于xml_create_memory和xml_create参数filename为
  71.  *                NULL时创建的xml实例
  72.  **********************************************************************/
  73. int xml_save(TXML *xml);
  74. /***********************************************************************
  75.  * 功能: 保存xml实例到文件中
  76.  * @xml         : xml实例
  77.  * @filename    : 保存路径
  78.  * 返回值       : 0 - 成功, other - 失败
  79.  **********************************************************************/
  80. int xml_save_to(TXML *xml, const char *filename);
  81. /***********************************************************************
  82.  * 功能: 保存xml实例到文件中,然后释放xml实例
  83.  * @xml         : xml实例
  84.  * 返回值:      0 - 成功, other - 失败
  85.  * 注意         : 不能用于xml_create_memory创建的xml实例。
  86.  *                即使保存失败, xml实例同样被关闭。
  87.  **********************************************************************/
  88. int xml_save_close(TXML *xml);
  89. ///////////////////////////////////////////////////////////////////////
  90. ///////////////////////////////////////////////////////////////////////
  91. ///////////////////////////////////////////////////////////////////////
  92. /***********************************************************************
  93.  * 功能: 执行xpath查询,以获取节点集合
  94.  * @xml         : xml实例
  95.  * @xpath       : xpath语句
  96.  * 返回值       : 成功返回节点个数, 失败返回-1
  97.  **********************************************************************/
  98. int xml_select_nodes(TXML *xml, const char *xpath);
  99. /***********************************************************************
  100.  * 功能: 获取调用xml_do_xpath后获得的节点集合中节点属性
  101.  * @xml         : xml实例
  102.  * @index       : 节点序号(从0开始)
  103.  * @name        : 属性名称
  104.  * 返回值       : 成功返回属性值, 失败返回NULL
  105.  **********************************************************************/
  106. char *xml_read_set_prop(TXML *xml, const int index, const char *name);
  107. /***********************************************************************
  108.  * 功能: 获取调用xml_select_nodes后获得的节点集合中节点注释
  109.  * @xml         : xml实例
  110.  * @index       : 节点序号(从0开始)
  111.  * 返回值       : 成功返回注释值, 失败返回NULL
  112.  **********************************************************************/
  113. char *xml_read_set_content(TXML *xml, const int index);
  114. /***********************************************************************
  115.  * 功能: 新增或修改调用xml_select_nodes后获得的节点集合中节点属性
  116.  * @xml         : xml实例
  117.  * @index       : 节点序号(从0开始)
  118.  * @name        : 属性名称
  119.  * @value       : 属性值
  120.  * 返回值       : 0 - 成功, other - 失败
  121.  **********************************************************************/
  122. int xml_write_set_prop(TXML *xml, const int index, const char *name, const char *value);
  123. /***********************************************************************
  124.  * 功能: 新增或修改调用xml_select_nodes后获得的节点集合中节点正文
  125.  * @xml         : xml实例
  126.  * @index       : 节点序号(从0开始)
  127.  * 返回值       : 成功返回注释值, 失败返回NULL
  128.  **********************************************************************/
  129. int xml_write_set_content(TXML *xml, const int index, const char *value);
  130. /***********************************************************************
  131.  * 功能: 获取符合xpath的首个节点的属性值
  132.  * @xml         : xml实例
  133.  * @xpath       : xpath路径
  134.  * @name        : 属性名称
  135.  * 返回值       : 成功返回属性值, 失败返回NULL
  136.  **********************************************************************/
  137. char *xml_read_item_prop(TXML *xml, const char *xpath, const char *name);
  138. /***********************************************************************
  139.  * 功能: 获取符合xpath的首个节点的注释
  140.  * @xml         : xml实例
  141.  * @index       : 节点序号(从0开始)
  142.  * 返回值       : 成功返回注释值, 失败返回NULL
  143.  **********************************************************************/
  144. char *xml_read_item_content(TXML *xml, const char *xpath);
  145. /***********************************************************************
  146.  * 功能: 新增或修改符合xpath的首个节点的属性值
  147.  * @xml         : xml实例
  148.  * @xpath       : xpath路径
  149.  * @name        : 属性名称
  150.  * 返回值       : 成功返回属性值, 失败返回NULL
  151.  **********************************************************************/
  152. int xml_write_item_prop(TXML *xml, const char *xpath, const char *name, const char *value);
  153. /***********************************************************************
  154.  * 功能: 新增或修改符合xpath的首个节点的注释
  155.  * @xml         : xml实例
  156.  * @index       : 节点序号(从0开始)
  157.  * 返回值       : 成功返回注释值, 失败返回NULL
  158.  **********************************************************************/
  159. int xml_write_item_content(TXML *xml, const char *xpath, const char *value);
  160. ///////////////////////////////////////////////////////////////////////
  161. ///////////////////////////////////////////////////////////////////////
  162. ///////////////////////////////////////////////////////////////////////
  163. /***********************************************************************
  164.  * 功能: 为符合xpath的节点新增子节点
  165.  * @xml         : xml实例
  166.  * @xpath       : xpath语句
  167.  * @name        : 新增节点名称
  168.  * @...         : 新增节点的属性名、属性值、...、最后是注释,然后是NULL.
  169.  *                属性名和属性值必须成对出现。
  170.  * 返回值       : 0 - 成功, other - 失败返回NULL
  171.  * 注意         : xpath匹配多个节点会导致函数执行失败.
  172.  **********************************************************************/
  173. int xml_add_child(TXML *xml, const char *xpath, const char *name, ...);
  174. /***********************************************************************
  175.  * 功能: 为符合xpath的节点之前新增一个兄弟节点
  176.  * @xml         : xml实例
  177.  * @xpath       : xpath语句
  178.  * @name        : 新增节点名称
  179.  * @...         : 新增节点的属性名、属性值、...、最后是注释,然后是NULL.
  180.  *                属性名和属性值必须成对出现。
  181.  * 返回值       : 0 - 成功,other - 失败
  182.  * 注意         : xpath匹配多个节点会导致函数执行失败.
  183.  **********************************************************************/
  184. int xml_add_prev_sibling(TXML *xml, const char *xpath, const char *name, ...);
  185. /***********************************************************************
  186.  * 功能: 为符合xpath的节点之后新增兄弟节点
  187.  * @xml         : xml实例
  188.  * @xpath       : xpath语句
  189.  * @name        : 新增节点名称
  190.  * @...         : 新增节点的属性名、属性值、...、最后是注释,然后是NULL.
  191.  *                属性名和属性值必须成对出现。
  192.  * 返回值       : 0 - 成功,other - 失败
  193.  * 注意         : xpath匹配多个节点会导致函数执行失败.
  194.  **********************************************************************/
  195. int xml_add_next_sibling(TXML *xml, const char *xpath, const char *name, ...);
  196. /***********************************************************************
  197.  * 功能: 为符合xpath的节点新增子节点
  198.  * @xml         : xml实例
  199.  * @xpath       : xpath语句
  200.  * @name        : 新增节点名称
  201.  * @...         : 新增节点的属性名、属性值、...、最后是注释,然后是NULL.
  202.  *                属性名和属性值必须成对出现。
  203.  * 返回值       : 0 - 成功,other - 失败
  204.  * 注意         : xpath匹配多个节点会导致函数执行失败.
  205.  **********************************************************************/
  206. int xml_add_sibling(TXML *xml, const char *xpath, const char *name, ...);
  207. /***********************************************************************
  208.  * 功能: 移除所有符合xpath的节点
  209.  * @xml         : xml实例
  210.  * @xpath       : xpath语句
  211.  * 返回值       : 0 - 成功, other - 失败
  212.  **********************************************************************/
  213. int xml_remove(TXML *xml, const char *xpath);
  214. #ifdef __cplusplus
  215. }
  216. #endif
  217. #endif
  218. // vim: ts=8 sw=8 expandtab