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主要函数说明 (二)相关推荐

  1. R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能、并使用autoplot函数可视化模型的PR曲线(precision recall)

    R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能.并使用autoplot函数可视化模型的PR曲线(precision recall) 目录

  2. R语言使用compareGroups包compareGroups函数生成表统计表、createTable函数创建二元表、并导出结果到文档(doc、csv、xlsx、pdf)

    R语言使用compareGroups包compareGroups函数生成表统计表.createTable函数创建二元表.并导出结果到文档(doc.csv.xlsx.pdf) 目录 R语言使用compa ...

  3. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  4. Go 函数,包(二)

    #### Go 函数,包(二)***百丈峰,松如浪,地势坤,厚德载物之像*** 今天又到周五啦,你们有没有激动呢,反正我很激动,又有两天的自由了; 上一节我们学习了Go 的函数和包的一些知识 , 今天 ...

  5. boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数

    boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数 实现功能 C++实现代码 实现功能 boost::python模块包装几个 ...

  6. php 二维数组排序函数,php自定义函数实现二维数组排序功能

    本文实例讲述了php自定义函数实现二维数组排序功能.分享给大家供大家参考,具体如下: /**作用: 二维数组排序函数,支持多键名排序 * 返回: 排序好的数组 * 使用: array_msort(数组 ...

  7. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  8. php 函数 中文,PHP语言之PHP中文函数连载(二)

    本文主要向大家介绍了PHP语言之PHP中文函数连载(二),通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 函数count() 描述: 计算一变量中元素的个数 int count (mix ...

  9. R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值、简化汇总结果

    R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值.自变量的似然 ...

  10. 在excel中使用offset和match函数进行二维表对二维表的匹配

    这次我们来介绍一个可以快速完成二维表对二维表匹配的方法. 需求背景: 如上图所示,我们现在有两个二维表需要进行匹配,上面这个是匹配源表,我们需要拿这个源表匹配到需匹配的二维表上. 该表是我们的匹配源表 ...

最新文章

  1. ThinkSNS+ 是如何计算字符显示长度的
  2. stm32 基本定时器TIM6、TIM7的使用
  3. mysql重装要删注册表_Mysql重装问题—删除注册表
  4. WordPress中输出当前页面SQL语句的方法
  5. 集合源码阅读:LinkedList
  6. [spring boot] ------ 总结1
  7. 关于PHP代码的开始和结束标签书写,关于PHP结束标签?gt;的使用细节
  8. c#怎么设置一个字符串中某个字符的颜色
  9. 计算机课本ppt,计算机基础知识培训教材(ppt44页) .pptx
  10. socket通信需要网线连接吗_从socket到TCP协议,透彻理解网络编程
  11. Tensflow学习笔记(一)——TF生成并查看数据
  12. 双目摄像头和单目摄像头_挑战激光雷达,MAXIEYE要重新定义单目摄像头?
  13. linux本地光盘yum
  14. webpack在内存生成html,Vue学习之Webpack基本使用小结(十三)
  15. Unity中文博主频道列表
  16. android 涨潮动画加载_潮汐apk客户端-潮汐android最新版APP下载v2.0.1.1 免费版-腾牛安卓网...
  17. CentOS7 Juno Cinder块重启后 实例起不来 --rescan Exit code: 21
  18. java面试宝典及答案_最新Java面试宝典及答案
  19. 如何画一条0.5px的边(细线)
  20. 正态分布(用python画出相应的图)

热门文章

  1. window环境下杀死tomcat
  2. JS组件系列——表格组件神器:bootstrap table(二:父子表和行列调序)
  3. activeMQ支持的四种协议简介及性能比较
  4. Url传值的Get method and Post method
  5. elasticsearch删除索引
  6. 使用git命令把自己的代码上传到gitlab上
  7. 总结:常用的 Python 爬虫技巧
  8. 【DBA之路】第1回 表空间的做成和扩张
  9. selenium 如何处理table
  10. 深入理解JavaScript系列(25):设计模式之单例模式