加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:09:43 所属栏目:百科 来源:网络整理
导读:libxml读取xml文件的其他方法 2012-05-08 17:12 1085人阅读 评论(0) 收藏 举报 xml null 文档 file 工作 在前面一篇文章我提到了一种分析文档的方法,即调用xmlParseFile函数。当我看了libxml官网上的code examples之后,我发现libxml还提供了更加精准的分析

libxml读取xml文件的其他方法

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

1 调用xmlReadFile函数

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

[cpp] view plain copy print ?
  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. "cannotcreatectxtn");
  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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读