两个函数,怎么在内存中处理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函数相关推荐

  1. linux安装了xml怎么编译,linux下libxml库的安装及编译

    linux下libxml库的安装及编译 1. 下载和安装LIBXML2 Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换 ...

  2. linux中从内存解析xml格式的库,Linux下使用libxml库解析xml文件

    目录 libxml简介 libxml库安装 libxml2中的数据类型和函数 xml文档解析实例 运行结果 libxml简介 libxml是一个用于解析xml文件的库,在各个平台下都能使用,也支持多种 ...

  3. c语言标准库低通的qsort函数不适宜所有排序任务的原因

    c语言标准库低通的qsort函数不适宜所有排序任务的原因: 第一:它只能用于内存中的数组排序,不能对链表中的数据排序: 第二:因为它是参数化的函数,所以能对各种数据进行操作,也造成它的运行速度比针对单 ...

  4. python中求和公式是什么函数_Python的math库中,用于求和的函数是( )。

    [单选题]确定兴利库容 V 兴 ,已知某水库为一回运用水库,其一次蓄水量为 V 1 =300 万 m 3 ,一次供水量为 V 2 =150 万 m 3 . [ ]. [单选题]hAB大于0说明B点的高 ...

  5. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  6. 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍

    计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...

  7. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍

    计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...

  8. Py之re:re正则表达式库的简介、常用函数、经典案例之详细攻略

    Py之re:re正则表达式库的简介.常用函数.经典案例之详细攻略 目录 re正则表达式库的简介 1.正则表达式元字符表集合--正则表达式的pattern re正则表达式库的常用函数 1.re.comp ...

  9. C语言标准库里的获取时间函数及时间格式转换详解

    C语言标准库里的获取时间函数及时间格式转换详解 头文件: #include <time.h> 相关库函数(截图摘自:https://www.runoob.com/cprogramming/ ...

最新文章

  1. iphone系统更新 3002错误
  2. 当前分支上有未提交的更改时签出另一个分支
  3. 马云携阿里17位创始人及合伙人捐赠浙大一院5.6亿,杭州渐成中国硅谷
  4. Python操作MySQL之SQLAlchemy
  5. JRE System Library、Referenced Libraries、Web App Libraries的含义
  6. Java填坑系列之SparseArray
  7. 惠普宣布WebOS平板和手机,透露电脑计划
  8. T-SQL with as 关键字
  9. 20145212 《信息安全系统设计基础》第2周学习总结
  10. cad文字递增快捷键_十年经验总结,100个CAD快捷键。
  11. QT添加rtmp库的时候出现问题
  12. 12面魔方公式图解法_一位建筑工程师:多年渴望就是学会魔方还原,只按这七步就可以!...
  13. 操作系统(7)-进程、线程、协程的区别
  14. html一段文字弹窗提示代码,css3提示文字弹窗代码
  15. 错误: -source 1.6 中不支持 diamond 运算符
  16. 批处理获取网卡名称(附修改IP、网关、DNS脚本)
  17. 高斯滤波matlab函数,matlab自带函数实现高斯滤波(gauss filter)快速算法
  18. Centos7 无线网络设置
  19. JS实现元素拖拽,简单悬浮框实现
  20. vue3 创建vue3模板

热门文章

  1. 修改GL_RENDERER
  2. shell-if语句详解
  3. aviator表达式教程
  4. 个人C语言的一次综合运用程序
  5. MFC vc++ 中CTreeContrl如何自定义实现鼠标单击或双击响应事件 ,即重写类似于控件的响应事件或消息
  6. 艾永亮:小天才手表如何成为业内巨头,大佬教你如何满足用户需求
  7. element table 拖动改变列宽
  8. 【数据结构与算法基础】哈夫曼树与哈夫曼编码(C++)
  9. 连接wifi没有验证页面
  10. 在ONLYOFFICE中借助ChatGPT一键创建招聘启事的内容