libxml2常用函数集锦之三

本文介绍了libxml中自定义字符类型xmlChar及其相关字符串操作函数,包括连接、查找、比较等基本操作.这些函数与标准C库中的字符串函数类似,但专为xmlChar类型设计.

libxml自定义了一个字符类型xmlChar,其本质是 unsigned char.

另外,libxml提供了一个宏来将char*转换成xmlChar*, 名字很有趣,叫 BAD_CAST 它的本质其实是 unsigned char*.

为了方便对xmlChar类型字符串的操作,libxml提供了自己的函数,它们的定义于标准c函数库中的字符串函数很像.

 

xmlChar* xmlStrcat (xmlChar *cur, const xmlChar * add)

 

const xmlChar *xmlStrchr(const xmlChar * str, xmlChar val)

 

int xmlStrcmp (const xmlChar * str1, const xmlChar * str2)

 

int xmlStrlen (const xmlChar * str)

 

xmlChar *xmlStrncat (xmlChar * cur, const xmlChar * add, int len)

 

int xmlStrncmp (const xmlChar * str1, const xmlChar * str2, int len)

const xmlChar *xmlStrstr (const xmlChar * str, const xmlChar * val)

 

相信这些函数大家都看得眼熟,这里就不一一解释了.

 

更多函数大家可以参考

http://xmlsoft.org/html/libxml-xmlstring.html

 

### libxml2 解析 XML 的常用 API 函数 #### 初始化和清理 为了确保程序能够正确初始化并释放资源,可以使用如下函数: - `xmlInitParser()`:初始化全局变量和其他设置[^1]。 - `xmlCleanupParser()`:清理所有分配的内存以及关闭打开的文件。 #### 创建和读取文档对象 创建或加载XML文档时会频繁用到这些API: - `xmlReadFile(const char *URL, const char *encoding, int options)`:此方法接受三个参数——文件路径、字符集名称(可选)、选项标志位组合。成功执行后返回`xmlDocPtr`类型的指针指向新构建好的DOM树根部; 如果失败则返回NULL值。 ```c #include <libxml/parser.h> // ... xmlDocPtr doc; doc = xmlReadFile("example.xml", NULL, 0); if (doc == NULL ) { fprintf(stderr,"Document not parsed successfully. \n"); } ``` #### 获取节点信息 操作DOM树上的各个元素需要用到下面几个重要的接口之一: - `xmlGetRootElement(xmlDocPtr doc)` :取得当前文档最顶层(即根)元素作为起点来进行后续遍历工作[^2]。 - `xmlFirstElementChild(xmlNodePtr node)` : 返回给定父级下的第一个子元素节点[^3]。 - `xmlNextElementSibling(xmlNodePtr sibling)` : 查找同辈序列里的下一个兄弟姐妹成员[^4]。 ```c xmlNodePtr root_element = xmlDocGetRootElement(doc); for (xmlNodePtr current_node = root_element->children ;current_node != NULL;current_node=current_node->next){ if(current_node->type==XML_ELEMENT_NODE){ printf("node type: Element, name: %s\n", current_node->name); } } ``` #### 属性访问 对于属性的操作也有专门的方法支持: - `xmlNewProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value)` : 向指定位置添加新的特性项。 - `xmlGetProp(xmlNodePtr node, const xmlChar *name)` : 提取出目标实体所携带的具体特征值得到一个字符串副本。 ```c xmlSetProp(root_element,(const xmlChar *)"id",(const xmlChar *)"v1"); printf("%s\n",xmlGetProp(root_element,(const xmlChar*)"id")); ``` #### 销毁文档对象 当不再需要某个已解析完成的对象实例时应该及时销毁它以防止泄露问题发生: - `xmlFreeDoc(xmlDocPtr cur)` : 清除整个文档及其关联的所有内部结构体占用的空间。 ```c xmlFreeDoc(doc); /* free document */ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值