您的位置:首页 > 其它

利用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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐