libxml读取xml文件的其他方法
来源:互联网 发布:单片机卡尔曼滤波 编辑:程序博客网 时间:2024/04/27 14:12
在前面一篇文章我提到了一种分析文档的方法,即调用xmlParseFile函数。当我看了libxml官网上的code examples之后,我发现libxml还提供了更加精准的分析方式。
2 使用xmlParseCtxtPtr解析文件
不要忘了最后释放ctxt。
1 调用xmlReadFile函数
xmlReadFile函数接收三个参数,第一个参数是文件名,第二个参数是编码类型,第三个参数是分析时的选项。由于提供了更多的参数,所以这个函数能更精确的处理文件。这个函数返回一个xmlDocPtr,得到这个指针后我们可以对各个节点进行操作了。
- xmlDocPtr doc = NULL;
- doc = xmlReadFile(docname, NULL, XML_PARSE_DTDVALID);
2 使用xmlParseCtxtPtr解析文件
libxml提供了这样一个结构体xmlParserCtxt,这个结构体可以深入控制解析的工程,先看看他是如何工作的。
- xmlParserCtxtPtr ctxt = NULL;
- xmlDocPtr doc = NULL;
- ctxt = xmlNewParserCtxt();
- doc = xmlCtxtReadFile(ctxt, docnamen,NULL, 0);
不要忘了最后释放ctxt。
使用ctxt的一个操作就是分块处理文件,即读进文件的一部分,边读边分析。
- xmlParserCtxtPtr ctxt = NULL;
- xmlDocPtr doc = NULL;
- static char chunk[1024];
- int num = 0;
- FILE* fd = NULL;
- fd = fopen(docname, "rb");
- if(NULL == fd) {
- fprintf(stderr, "open error!\n");
- exit(1);
- }
- num = fread(chunk, 1, 1024, fd);
- if(num <= 0) {
- fprintf(stderr, "read error!\n");
- fclose(fd);
- exit(2);
- }
- ctxt = xmlCreatePushParserCtxt(NULL, NULL, chunk, num, docname);
- if(NULL == ctxt) {
- fprintf(stderr, "cannot create ctxt\n");
- fclose(fd);
- exit(3);
- }
- while((num = fread(chunk,1,1024,fd)) >0) {
- xmlParseChunk(ctxt, chunk, num, 0);
- }
- xmlParseChunk(ctxt, chunk,0,1);
- doc = ctxt->myDoc;
- num = ctxt->wellFormed;
- xmlFreeParserCtxt(ctxt);
- if(0 == num) {
- fprintf(stderr, "fail to parse!\n");
- fclose(fd);
- exit(4);
- }
- // handle doc
- xmlFreeDoc(doc);
- fclose(fd);
- libxml读取xml文件的其他方法
- libxml读取xml文件的其他方法
- libxml读取xml文件的其他方法 http://blog.csdn.net/hdutigerkin/article/details/7547014
- libxml的使用(1)--读取xml
- libxml的使用(1)--读取xml
- libxml的使用(1)--读取xml
- libxml的使用(1)--读取xml
- libxml的使用(1)--读取xml
- libxml的使用(1)--读取xml
- 通过libxml库解析XML文件方法
- 利用LIBXML库遍历读取XML文件所有的属性和content
- libxml解析xml文件的一些总结
- xml文件的解析--libxml库函数解析
- libxml库解析XML文件
- libxml库解析XML文件
- libxml库解析XML文件
- libxml 解析 显示 xml文件
- libxml库解析XML文件
- libxml的使用(3)--编辑节点
- 宁夏否认吴忠黄河大桥封路为收费新桥增流量-吴忠黄河大桥-封路
- ubuntu上安装mongodb
- libxml的使用(4)--xpath搜索节点树
- 代码实现退出app
- libxml读取xml文件的其他方法
- postgresql安装
- C# 实现TrackBar控件美化换肤
- VC得到当前电脑的CPU信息
- iPhone实战:操作SQLite
- 四种进程或线程同步互斥的控制方法
- Linux进程调度时机
- 上海纽约大学正式成立 大陆生每学年10万学费-上海纽约大学-学费-学生
- 如何下载并编译Android4.0内核源码goldfish(图文)