libxml主要函数说明 (二)
4. 创建和释放XML文档函数
函数功能 |
在内存中创建一个新的XML文档。所创建的文档需要使用xmlFreeDoc()来释放资源 |
函数接口 |
xmlDocPtr xmlNewDoc (const xmlChar * version) |
参数说明 |
version:XML标准的版本,目前只能指定为“1.0” |
简单例程 |
xmlDocPtr pdoc ; pdoc = xmlNewDoc((const xmlChar*)"1.0"); if( pdoc == NULL ) { printf(“Fail to create new XML doc.\n”); } |
函数功能 |
释放内存中的XML文档 |
函数接口 |
void xmlFreeDoc(xmlDocPtr cur) |
参数说明 |
cur:需要释放的XML文档 |
简单例程 |
xmlDocPtr pdoc ; pdoc = xmlNewDoc((const xmlChar*)"1.0"); if( pdoc == NULL ) { printf(“Fail to create new XML doc.\n”); } xmlFreeDoc(podc); |
5. XML节点操作函数
函数功能 |
获得根节点 |
函数接口 |
xmlNodePtr xmlDocGetRootElement(xmlDocPtr doc) |
参数说明 |
doc:XML文档句柄。 返回值:XML文档的根节点,或者NULL。 |
使用流程 |
①解析好文档的根节点指针,应用使用该指针可以遍历XML文件 ② xmlNodePtr的next字段,指向下一个同级XML节点 ③ properties字段为xmlAttr类型,指向该XML节点的属性 ④ children字段为xmlNodePtr类型,指向该XML节点的子节点 |
简单例程 |
xmlDocPtr pdoc ; xmlNodePtr root ; pdoc = xmlParseFile("123.xml"); if( pdoc == NULL ) { printf("Fail to parse XML File.\n"); return ; } root = xmlDocGetRootElement(pdoc); if( root == NULL) { printf("Fail to get root element\n"); return; } |
函数功能 |
设置根节点 |
函数接口 |
xmlNodePtr xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) |
参数说明 |
doc:XML文档句柄 root:XML文档的新的根节点 返回值:如果该文档原来有根节点,则返回根节点,否则返回NULL |
简单例程 |
xmlDocPtr pdoc ; xmlNodePtr root; pdoc = xmlNewDoc((const xmlChar*)"1.0"); if( pdoc == NULL ) { printf("Fail to create new XML doc.\n"); return; } root = xmlNewDocNode(pdoc, NULL, (const xmlChar*)"root", NULL); if( root == NULL ) { printf("Fail to create doc node.\n"); return ; } xmlDocSetRootElement(pdoc, root); |
函数功能 |
获得节点的内容 |
函数接口 |
xmlChar * xmlNodeGetContent (xmlNodePtr cur) |
参数说明 |
cur:节点的指针 返回值:节点的文本内容。如果该节点没有文本内容,则返回NULL。当返回值不为NULL时,需要用xmlFree()函数来释放返回的资源 |
简单例程 |
xmlNodePtr node; xmlChar* content; node = …. content = xmlNodeGetContent(node); xmlFree(content); |
函数功能 |
设置节点的内容长度 |
函数接口 |
void xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar * content, int len) |
参数说明 |
cur:节点的指针 content:节点的新文本内容 len:节点新文本内容的长度 |
简单例程 |
xmlNodePtr node; xmlChar* content; int len; content = (xmlChar*)"1234567890"; len = strlen((char*)content); xmlNodeSetContentLen(node, content, len); |
函数功能 |
在节点的内容后面添加新的内容 |
函数接口 |
void xmlNodeAddContentLen(xmlNodePtr cur, const xmlChar * content, int len) |
参数说明 |
cur:节点的指针 content:节点的新加的文本内容 len:节点新加的文本内容的长度 |
简单例程 |
xmlNodePtr node; xmlChar* content; int len; content = (xmlChar*)"1234567890"; len = strlen((char*)content); xmlNodeAddContentLen(node, content, len); |
函数功能 |
获得节点的属性 |
函数接口 |
xmlChar * xmlGetProp(xmlNodePtr node, const xmlChar * name) |
参数说明 |
node:XML节点的指针 name:该节点的属性的名称 返回值:该属性的值或者为NULL。如果不为NULL,则需要用xmlFree()来释放资源 |
简单例程 |
xmlNodePtr node; xmlChar* prop; node = …. prop = xmlGetProp(node, (const xmlChar*)"name"); if( prop != NULL) xmlFree(prop); |
函数功能 |
设置节点的属性(如果该属性已经存在,则替换其值) |
函数接口 |
xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar * name, const xmlChar * value) |
参数说明 |
node:需要设置属性的节点 name:属性的名称 value:属性的值 返回值:该属性节点的指针 |
简单例程 |
xmlNodePtr node; xmlAttrPtr attr; node = …. attr = xmlSetProp(node, (cosnt xmlChar*)"Dept-Name", (const xmlChar*)"ES"); if( attr == NULL) { printf("Fail to set prop of this node.\n"); } |
6. XPath函数
函数功能 |
生成xpath的上下文关系句柄 |
函数接口 |
xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc) |
参数说明 |
doc:需要处理的XML文档 返回值:该文档的XPath上下文关系句柄或者NULL。该返回句柄由函数内部申请,此函数调用者需要用xmlXPathFreeContext来释放 |
简单例程 |
xmlDocPtr pdoc; xmlXPathContextPtr xpathctx; pdoc = …. xpathctx = xmlXPathNewContext(pdoc); if( xpathctx != NULL) xmlXPathFreeContext(xpathctx); |
函数功能 |
释放xpath的上下文关系句柄 |
函数接口 |
void xmlXPathFreeContext(xmlXPathContextPtr ctxt) |
参数说明 |
ctxt:需要释放的xpath上下文关系句柄 |
简单例程 |
参见xmlXPathNewContext()的例程 |
函数功能 |
执行xpath的表达式,返回结果内容节点集合 XPath表达式的表示方法,请参考: http://www.zvon.org/xxl/XPathTutorial/General/examples.html |
函数接口 |
xmlXPathObjectPtr xmlXPathEvalExpression (const xmlChar * str, xmlXPathContextPtr ctxt) |
参数说明 |
str:xpath表达式 ctxt:xpath的上下文关系句柄 返回值:满足表达式的结果集合或者为NULL。该返回句柄由函数内部申请,此函数调用者需要用xmlXPathFreeObject()来释放 |
简单例程 |
xmlDocPtr pdoc; xmlXPathContextPtr xpathctx; xmlXPathObjectPtr xpathobj; pdoc = …. xpathctx = xmlXPathNewContext(pdoc); if( xpathctx == NULL) { printf("Fail to create xpath context.\n"); return ; } Xpathobj = xmlXPathEvalExpression(BAD_CAST "//@value", xpathctx); if( xpathobj == NULL) { printf("Fail to evaluate xpath expression.\n"); xmlXPathFreeContext(xpathctx); return; } xmlXPathFreeObject(xpathobj); xmlXPathFreeContext(xpathctx); 结果集说明: xpathobj-> nodesetval:存储结果列表,如果为NULL,表示无结果 xpathObj->nodesetval->nodeNr:表示结果的数量 xpathObj->nodesetval->nodeTab:表示结果的数组,可以通过下标访问 例如: int number; xmlNodePtr node; if( xpathobj-> nodesetval == NULL) number = 0; else number = xpathObj->nodesetval->nodeNr; for(int i=0;i<number;i++) { node = xpathObj->nodesetval->nodeTab[i]; do_some_work_with_node(); } |
函数功能 |
释放xpath表达式运算结果集 |
函数接口 |
void xmlXPathFreeObject(xmlXPathObjectPtr obj) |
参数说明 |
obj:需要释放的xpath表达式运算结果集合 |
简单例程 |
参见xmlXPathEvalExpression()的例程 |
简单例程 |
参见xmlXPathEvalExpression()的例程 |
7. XML常见使用函数列表
下文是对XML常见使用函数的简要说明,有些函数的具体说明见上面的表格。
<libxml/parser.h>
intxmlKeepBlanksDefault (int val) //设置是否忽略空白节点,比如空格,在分析前必须调用,默认值是0,最好设置成1。
xmlDocPtrxmlParseFile (const char * filename) //分析一个xml文件,并返回一个文档对象指针
<libxml/tree.h>
//xml操作的基础结构提及其指针类型
//xmlDoc xmlDocPtr 文档对象的结构体及其指针
//xmlNodexmlNodePtr 节点对象的结构体及其指针
//xmlAttrxmlAttrPtr 节点属性的结构体及其指针
//xmlNs xmlNsPtr节点命名空间的结构及其指针
//根节点相关函数
xmlNodePtrxmlDocGetRootElement (xmlDocPtr doc) //获取文档根节点
xmlNodePtrxmlDocSetRootElement (xmlDocPtr doc, xmlNodePtr root) //设置文档根节点
//创建子节点相关函数
xmlNodePtr xmlNewNode(xmlNsPtr ns, const xmlChar * name) //创建新节点
xmlNodePtrxmlNewChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar * name, constxmlChar * content) //创建新的子节点
xmlNodePtrxmlCopyNode (const xmlNodePtr node, int extended) //复制当前节点
//添加子节点相关函数
xmlNodePtrxmlAddChild (xmlNodePtr parent, xmlNodePtr cur) //给指定节点添加子节点
xmlNodePtrxmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem) //添加后一个兄弟节点
xmlNodePtrxmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem) //添加前一个兄弟节点
xmlNodePtrxmlAddSibling (xmlNodePtr cur, xmlNodePtr elem) //添加兄弟节点
//属性相关函数
xmlAttrPtrxmlNewProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //创建新节点属性
xmlChar *xmlGetProp (xmlNodePtr node, const xmlChar * name) //读取节点属性
xmlAttrPtrxmlSetProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //设置节点属性
//作用同尾部同名的字符串函数。只不过针对相应的xml节点
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)
libxml主要函数说明 (二)相关推荐
- R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能、并使用autoplot函数可视化模型的PR曲线(precision recall)
R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能.并使用autoplot函数可视化模型的PR曲线(precision recall) 目录
- R语言使用compareGroups包compareGroups函数生成表统计表、createTable函数创建二元表、并导出结果到文档(doc、csv、xlsx、pdf)
R语言使用compareGroups包compareGroups函数生成表统计表.createTable函数创建二元表.并导出结果到文档(doc.csv.xlsx.pdf) 目录 R语言使用compa ...
- 黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化. 变量 ...
- Go 函数,包(二)
#### Go 函数,包(二)***百丈峰,松如浪,地势坤,厚德载物之像*** 今天又到周五啦,你们有没有激动呢,反正我很激动,又有两天的自由了; 上一节我们学习了Go 的函数和包的一些知识 , 今天 ...
- boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数
boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数 实现功能 C++实现代码 实现功能 boost::python模块包装几个 ...
- php 二维数组排序函数,php自定义函数实现二维数组排序功能
本文实例讲述了php自定义函数实现二维数组排序功能.分享给大家供大家参考,具体如下: /**作用: 二维数组排序函数,支持多键名排序 * 返回: 排序好的数组 * 使用: array_msort(数组 ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- php 函数 中文,PHP语言之PHP中文函数连载(二)
本文主要向大家介绍了PHP语言之PHP中文函数连载(二),通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 函数count() 描述: 计算一变量中元素的个数 int count (mix ...
- R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值、简化汇总结果
R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值.自变量的似然 ...
- 在excel中使用offset和match函数进行二维表对二维表的匹配
这次我们来介绍一个可以快速完成二维表对二维表匹配的方法. 需求背景: 如上图所示,我们现在有两个二维表需要进行匹配,上面这个是匹配源表,我们需要拿这个源表匹配到需匹配的二维表上. 该表是我们的匹配源表 ...
最新文章
- Asynctask源码分析
- 单片机最小系统硬件电路图_经验分享:学单片机,51通则百通
- 化境文件上传修改版.可检测任何木马
- Prufer序列相关
- Spring学习笔记之Design of DispatcherServlet
- aix磁盘挂载到linux,AIX下文件系统挂载点相互调换方案
- 武新博士:新型MPP数据库将支撑起大数据时代
- tensorflow实战之手写体识别
- 思考的力量-总结-脑图
- golang+vue3+websocket 实时推送首页数据或者站内信
- matlab 浮雕算法,photoshop图像滤镜——浮雕算法(含matlab代码)
- 示波器怎么当做记录仪用​
- 让PcShare2005vip免费
- MATLAB 数据处理(二)非线性拟合——洛伦兹拟合(Lorentz fit)
- 简明扼要的HDFS元数据管理机制描述(NameNode和Secondary NameNode工作机制)
- Python地学分析 — GDAL对遥感影像重投影
- 【转】CVPR2019目标检测汇总
- 4399手游事业部,诚聘AS开发主程、C++前端开发工程师、erlang后端开发工程师
- windows开启ftp服务器
- CentOS7(Linux)源码安装MySQL5.7.35
热门文章
- 给iphone或touch加桌面图标
- 新安装 Ubuntu 12.10 需要做的 10 件事(转)
- 基于Vue.js 2.x系列 + Element UI + RBAC/AUTH权限 的响应式后台管理系统
- 一不小心就进入了P2P陷阱
- [Advance] How to debug a program (下):示例
- 腾讯正式开源高性能Hybrid框架VasSonic!
- CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
- linux定时任务Crond之服务器同步时间05
- Idea中找不到Java Application 的xml配置文件问题研究
- linux系统查看java安装路径