libxml库之xmlParseMemory和xmlDocDumpFormatMemory函数
两个函数,怎么在内存中处理xml文件。有个疑问,xmlChar *xmlbuff;这样系统第一次分配了xmlbuff的大小以后。对xml做修改,可以成功吗。
有空试试。
函数原型:
xmlParseMemoryxmlDocPtr xmlParseMemory (const char * buffer, int size)parse an XML in-memory block and build a tree.buffer: an pointer to a char array
size: the size of the array
Returns: the resulting document tree
Function: xmlParserAddNodeIn
代码示例:
解析xml字符串
xmlDocPtr doc = xmlParseMemory(pXml, length);//根据xmldoc获得xml的根节点
xmlNodePtr cur = xmlDocGetRootElement(doc);//获得子节点:->children获得不是第一个子节点,必须用next才能获得第一个子节点
cur = cur->children;
cur = cur->next;// 获得节点信息中的内容: 注意释放资源
xmlChar* key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
xmlFree(key);//获得节点信息属性的值:属性name,注意释放资源
xmlChar* fversion = xmlGetProp(cur, "version");
xmlFree(fversion);//根节点相关函数
xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc) //获取文档根节点
xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc, xmlNodePtr root) //设置文档根节点//创建子节点相关函数
xmlNodePtr xmlNewNode (xmlNsPtr ns, const xmlChar * name) //创建新节点
xmlNodePtr xmlNewChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar * name, const xmlChar * content) //创建新的子节点
xmlNodePtr xmlCopyNode (const xmlNodePtr node, int extended) //复制当前节点//添加子节点相关函数
xmlNodePtr xmlAddChild (xmlNodePtr parent, xmlNodePtr cur) //给指定节点添加子节点
xmlNodePtr xmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem) //添加后一个兄弟节点
xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem) //添加前一个兄弟节点
xmlNodePtr xmlAddSibling (xmlNodePtr cur, xmlNodePtr elem) //添加兄弟节点//属性相关函数
xmlAttrPtr xmlNewProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //创建新节点属性
xmlChar * xmlGetProp (xmlNodePtr node, const xmlChar * name) //读取节点属性
xmlAttrPtr xmlSetProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //设置节点属性=xmlNodeListGetstring(doc, cur->xmlChildrenNode, 1);
=xmlNodeContent(cur);
===========================================================================================
函数原型:
Function: xmlDocDumpFormatMemoryvoid xmlDocDumpFormatMemory (xmlDocPtr cur, xmlChar ** mem, int * size, int format)Dump an XML document in memory and return the #xmlChar * and it's size. It's up to the caller to free the memory with xmlFree(). Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was calledcur: the document
mem: OUT: the memory pointer
size: OUT: the memory length
format: should formatting spaces been added
程序示例:
/*** section: InputOutput* synopsis: Output to char buffer* purpose: Demonstrate the use of xmlDocDumpMemory* to output document to a character buffer* usage: io2* test: io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp* author: John Fleck* copy: see Copyright for the status of this software.*/#include <libxml/parser.h>#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
int
main(void)
{xmlNodePtr n;xmlDocPtr doc;xmlChar *xmlbuff;int buffersize;/** Create the document.*/doc = xmlNewDoc(BAD_CAST "1.0");n = xmlNewNode(NULL, BAD_CAST "root");xmlNodeSetContent(n, BAD_CAST "content");xmlDocSetRootElement(doc, n);/** Dump the document to a buffer and print it* for demonstration purposes.*/xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);printf("%s", (char *) xmlbuff);/** Free associated memory.*/xmlFree(xmlbuff);xmlFreeDoc(doc);return (0);}
#else
#include <stdio.h>int
main(void)
{fprintf(stderr,"library not configured with tree and output support\n");return (1);
}
#endif
来源:
http://xmlsoft.org/examples/io2.c //libxml官方网站
http://blog.163.com/miky_sun/blog/static/3369405201041942853395/
libxml库之xmlParseMemory和xmlDocDumpFormatMemory函数相关推荐
- linux安装了xml怎么编译,linux下libxml库的安装及编译
linux下libxml库的安装及编译 1. 下载和安装LIBXML2 Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换 ...
- linux中从内存解析xml格式的库,Linux下使用libxml库解析xml文件
目录 libxml简介 libxml库安装 libxml2中的数据类型和函数 xml文档解析实例 运行结果 libxml简介 libxml是一个用于解析xml文件的库,在各个平台下都能使用,也支持多种 ...
- c语言标准库低通的qsort函数不适宜所有排序任务的原因
c语言标准库低通的qsort函数不适宜所有排序任务的原因: 第一:它只能用于内存中的数组排序,不能对链表中的数据排序: 第二:因为它是参数化的函数,所以能对各种数据进行操作,也造成它的运行速度比针对单 ...
- python中求和公式是什么函数_Python的math库中,用于求和的函数是( )。
[单选题]确定兴利库容 V 兴 ,已知某水库为一回运用水库,其一次蓄水量为 V 1 =300 万 m 3 ,一次供水量为 V 2 =150 万 m 3 . [ ]. [单选题]hAB大于0说明B点的高 ...
- 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )
文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...
- 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍
计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...
- 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍
计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...
- Py之re:re正则表达式库的简介、常用函数、经典案例之详细攻略
Py之re:re正则表达式库的简介.常用函数.经典案例之详细攻略 目录 re正则表达式库的简介 1.正则表达式元字符表集合--正则表达式的pattern re正则表达式库的常用函数 1.re.comp ...
- C语言标准库里的获取时间函数及时间格式转换详解
C语言标准库里的获取时间函数及时间格式转换详解 头文件: #include <time.h> 相关库函数(截图摘自:https://www.runoob.com/cprogramming/ ...
最新文章
- iphone系统更新 3002错误
- 当前分支上有未提交的更改时签出另一个分支
- 马云携阿里17位创始人及合伙人捐赠浙大一院5.6亿,杭州渐成中国硅谷
- Python操作MySQL之SQLAlchemy
- JRE System Library、Referenced Libraries、Web App Libraries的含义
- Java填坑系列之SparseArray
- 惠普宣布WebOS平板和手机,透露电脑计划
- T-SQL with as 关键字
- 20145212 《信息安全系统设计基础》第2周学习总结
- cad文字递增快捷键_十年经验总结,100个CAD快捷键。
- QT添加rtmp库的时候出现问题
- 12面魔方公式图解法_一位建筑工程师:多年渴望就是学会魔方还原,只按这七步就可以!...
- 操作系统(7)-进程、线程、协程的区别
- html一段文字弹窗提示代码,css3提示文字弹窗代码
- 错误: -source 1.6 中不支持 diamond 运算符
- 批处理获取网卡名称(附修改IP、网关、DNS脚本)
- 高斯滤波matlab函数,matlab自带函数实现高斯滤波(gauss filter)快速算法
- Centos7 无线网络设置
- JS实现元素拖拽,简单悬浮框实现
- vue3 创建vue3模板