利用LIBXML库遍历读取XML文件所有的属性和content
2015-01-12 15:13
393 查看
<pre name="code" class="html"><?xml version="1.0"?> <story> <storyinfo> <author>John Fleck</author> <datewritten>June 2, 2002</datewritten> <keyword>example </keyword> <keyword1>example 1</keyword1> <keyword2>example 2</keyword2> <keyword3>example 3</keyword3> <keyword4>example 4</keyword4> <keyword5>example 5</keyword5> <keyword6>example 6</keyword6> </storyinfo> <keyword7>example 7</keyword7> <keyword8>example 8</keyword8> <keyword9>example 9</keyword9> <keyword10>example 10</keyword10> <body> <headline>This is the headline</headline> <para>This is the body text.</para> </body> </story>
要解析以上XML文件,利用LIBXML库,源代码如下:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <libxml/xmlmemory.h> #include <libxml/parser.h> xmlNodePtr currentNode; xmlNodePtr parseDoc(char *docname) { xmlDocPtr doc; xmlNodePtr cur; xmlKeepBlanksDefault(0); doc = xmlParseFile(docname); if (doc == NULL ) { fprintf(stderr,"Document not parsed successfully. \n"); return; } cur = xmlDocGetRootElement(doc); if (cur == NULL) { fprintf(stderr,"empty document\n"); xmlFreeDoc(doc); return; } return cur; } void PrintNameContent(xmlDocPtr doc,xmlNodePtr cur) { xmlChar *key; if (cur != NULL) { cur = cur->xmlChildrenNode; while (cur != NULL) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if(key != NULL) { printf("%s:%s\n",cur->name,key); xmlFree(key); } PrintNameContent(doc,cur); cur = cur->next; } } else { fprintf(stderr, "ERROR: Null Node!"); } } int main(int argc, char **argv) { char *docname; if (argc <= 1) { printf("Usage: %s docname\n", argv[0]); return(0); } docname = argv[1]; currentNode = parseDoc (docname); PrintNameContent(docname,currentNode); return 0; }
运行结果如下:
author:Ocean Yount
datewritten:1 12, 2015
keyword:example keyword
keyword1:example keyword1
keyword2:example keyword2
keyword3:example keyword3
keyword3:example keyword4
keyword3:example keyword5
keyword3:example keyword6
keyword3:example keyword7
keyword3:example keyword8
keyword3:example keyword9
keyword3:example keyword10
headline:This is the headline
para:This is the body text.
相关文章推荐
- .net中读取xml文件中节点的所有属性信息
- RapidXml 读取文件并遍历节点的所有属性
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 遍历指定文件夹下所有的xml文件并动态生成HTML页面!
- 遍历指定文件夹下所有的xml文件并动态生成HTML页面
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 遍历指定文件夹下所有的xml文件并动态生成HTML页面!
- java web 利用 commons-fileupload-1.2 实现文件上传 解决 中文乱码& 非文件属性的读取
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(一)
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- 遍历读取XML文件及web.config的动态更新
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(一)
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- 遍历该文件夹下的所有文件并生成xml树
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(二)
- 遍历指定文件夹下所有的xml文件并动态生成HTML页面!
- 遍历所有当前及下级目录,并记录为XML文件
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- XMl 文件属性的读取