libxml库之xmlParseMemory和xmlDocDumpFormatMemory函数 .

前端之家收集整理的这篇文章主要介绍了libxml库之xmlParseMemory和xmlDocDumpFormatMemory函数 .前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自: http://www.jb51.cc/article/p-aeshvcmd-op.html

两个函数,怎么在内存中处理xml文件。有个疑问,xmlChar *xmlbuff;这样系统第一次分配了xmlbuff的大小以后。对xml做修改,可以成功吗。

有空试试。


函数原型:

  1. xmlParseMemory
  2. xmlDocPtrxmlParseMemory(constchar*buffer,
  3. intsize)
  4. parseanXMLin-memoryblockandbuildatree.
  5. buffer:anpointertoachararray
  6. size:thesizeofthearray
  7. Returns:theresultingdocumenttree
  8. Function:xmlParserAddNodeIn


代码示例:
  1. 解析xml字符串
  2. xmlDocPtrdoc=xmlParseMemory(pXml,length);
  3. //根据xmldoc获得xml的根节点
  4. xmlNodePtrcur=xmlDocGetRootElement(doc);
  5. //获得子节点:->children获得不是第一个子节点,必须用next才能获得第一个子节点
  6. cur=cur->children;
  7. cur=cur->next;
  8. //获得节点信息中的内容:注意释放资源
  9. xmlChar*key=xmlNodeListGetString(doc,cur->xmlChildrenNode,1);
  10. xmlFree(key);
  11. //获得节点信息属性的值:属性name,注意释放资源
  12. xmlChar*fversion=xmlGetProp(cur,"version");
  13. xmlFree(fversion);
  14. //根节点相关函数
  15. xmlNodePtrxmlDocGetRootElement(xmlDocPtrdoc)//获取文档根节点
  16. xmlNodePtrxmlDocSetRootElement(xmlDocPtrdoc,xmlNodePtrroot)//设置文档根节点
  17. //创建子节点相关函数
  18. xmlNodePtrxmlNewNode(xmlNsPtrns,constxmlChar*name)//创建新节点
  19. xmlNodePtrxmlNewChild(xmlNodePtrparent,xmlNsPtrns,constxmlChar*name,constxmlChar*content)//创建新的子节点
  20. xmlNodePtrxmlCopyNode(constxmlNodePtrnode,intextended)//复制当前节点
  21. //添加子节点相关函数
  22. xmlNodePtrxmlAddChild(xmlNodePtrparent,xmlNodePtrcur)//给指定节点添加子节点
  23. xmlNodePtrxmlAddNextSibling(xmlNodePtrcur,xmlNodePtrelem)//添加后一个兄弟节点
  24. xmlNodePtrxmlAddPrevSibling(xmlNodePtrcur,xmlNodePtrelem)//添加前一个兄弟节点
  25. xmlNodePtrxmlAddSibling(xmlNodePtrcur,xmlNodePtrelem)//添加兄弟节点
  26. //属性相关函数
  27. xmlAttrPtrxmlNewProp(xmlNodePtrnode,constxmlChar*value)//创建新节点属性
  28. xmlChar*xmlGetProp(xmlNodePtrnode,constxmlChar*name)//读取节点属性
  29. xmlAttrPtrxmlSetProp(xmlNodePtrnode,constxmlChar*value)//设置节点属性
  30. =xmlNodeListGetstring(doc,1);
  31. =xmlNodeContent(cur);





===========================================================================================

函数原型:

  1. Function:xmlDocDumpFormatMemory
  2. voidxmlDocDumpFormatMemory(xmlDocPtrcur,
  3. xmlChar**mem,
  4. int*size,
  5. intformat)
  6. DumpanXMLdocumentinmemoryandreturnthe#xmlChar*andit'ssize.It'suptothecallertofreethememorywithxmlFree().Notethat@format=1providenodeindentingonlyifxmlIndentTreeOutput=1orxmlKeepBlanksDefault(0)wascalled
  7. cur:thedocument
  8. mem:OUT:thememorypointer
  9. size:OUT:thememorylength
  10. format:shouldformattingspacesbeenadded

程序示例:
  1. /**
  2. *section:InputOutput
  3. *synopsis:Output@R_502_294@arbuffer
  4. *purpose:DemonstratetheuSEOfxmlDocDumpMemory
  5. *tooutputdocumenttoacharacterbuffer
  6. *usage:io2
  7. *test:io2>io2.tmp;diffio2.tmpio2.res;rm-fio2.tmp
  8. *author:JohnFleck
  9. *copy:seeCopyrightforthestatusofthissoftware.
  10. */
  11. #include<libxml/parser.h>
  12. #ifdefined(LIBXML_TREE_ENABLED)&&defined(LIBXML_OUTPUT_ENABLED)
  13. int
  14. main(void)
  15. {
  16. xmlNodePtrn;
  17. xmlDocPtrdoc;
  18. xmlChar*xmlbuff;
  19. intbuffersize;
  20. /*
  21. *Createthedocument.
  22. */
  23. doc=xmlNewDoc(BAD_CAST"1.0");
  24. n=xmlNewNode(NULL,BAD_CAST"root");
  25. xmlNodeSetContent(n,BAD_CAST"content");
  26. xmlDocSetRootElement(doc,n);
  27. /*
  28. *Dumpthedocumenttoabufferandprintit
  29. *fordemonstrationpurposes.
  30. */
  31. xmlDocDumpFormatMemory(doc,&xmlbuff,&buffersize,1);
  32. printf("%s",(char*)xmlbuff);
  33. /*
  34. *Freeassociatedmemory.
  35. */
  36. xmlFree(xmlbuff);
  37. xmlFreeDoc(doc);
  38. return(0);
  39. }
  40. #else
  41. #include<stdio.h>
  42. int
  43. main(void)
  44. {
  45. fprintf(stderr,
  46. "librarynotconfiguredwithtreeandoutputsupport\n");
  47. return(1);
  48. }
  49. #endif
原文链接:https://www.f2er.com/xml/298627.html

猜你在找的XML相关文章