libxml读取xml文件的其他方法 http://blog.csdn.net/hdutigerkin/article/details/7547014

前端之家收集整理的这篇文章主要介绍了libxml读取xml文件的其他方法 http://blog.csdn.net/hdutigerkin/article/details/7547014前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

libxml读取xml文件的其他方法

1085人阅读 评论(0) 收藏 举报
在前面一篇文章我提到了一种分析文档的方法,即调用xmlParseFile函数。当我看了libxml官网上的code examples之后,我发现libxml还提供了更加精准的分析方式。

1 调用xmlReadFile函数

xmlReadFile函数接收三个参数,第一个参数是文件名,第二个参数是编码类型,第三个参数是分析时的选项。由于提供了更多的参数,所以这个函数能更精确的处理文件。这个函数返回一个xmlDocPtr,得到这个指针后我们可以对各个节点进行操作了。

  1. xmlDocPtrdoc=NULL;
  2. doc=xmlReadFile(docname,NULL,XML_PARSE_DTDVALID);

2 使用xmlParseCtxtPtr解析文件

libxml提供了这样一个结构体xmlParserCtxt,这个结构体可以深入控制解析的工程,先看看他是如何工作的。

?
    xmlParserCtxtPtrctxt=NULL;
  1. xmlDocPtrdoc=NULL;
  2. ctxt=xmlNewParserCtxt();
  3. doc=xmlCtxtReadFile(ctxt,docnamen,0);

不要忘了最后释放ctxt。

使用ctxt的一个操作就是分块处理文件,即读进文件的一部分,边读边分析。

?
    staticcharchunk[1024];
  1. intnum=0;
  2. FILE*fd=NULL;
  3. fd=fopen(docname,"rb");
  4. if(NULL==fd){
  5. fprintf(stderr,0); background-color:inherit">"openerror!\n");
  6. exit(1);
  7. }
  8. num=fread(chunk,1,1024,fd);
  9. if(num<=0){
  10. fprintf(stderr,0); background-color:inherit">"readerror!\n");
  11. fclose(fd);
  12. exit(2);
  13. ctxt=xmlCreatePushParserCtxt(NULL,chunk,num,docname);
  14. if(NULL==ctxt){
  15. "cannotcreatectxt\n");
  16. exit(3);
  17. while((num=fread(chunk,fd))>0){
  18. xmlParseChunk(ctxt,0);
  19. doc=ctxt->myDoc;
  20. num=ctxt->wellFormed;
  21. xmlFreeParserCtxt(ctxt);
  22. if(0==num){
  23. "failtoparse!\n");
  24. exit(4);
  25. //handledoc
  26. xmlFreeDoc(doc);
  27. fclose(fd);

猜你在找的XML相关文章