C语言libxml用法,C语言 使用libxml解析 生成和解析xml

##安装 libxml

libxml是一个用来解析XML文档的函数库。它用C语言写成,并且能为多种语言所调用

###下载libxml 貌似libxml官方已经被河蟹掉了。没关系这里有 libxml的下载地址 2.7.4

###下载之后解压 tar -zxvf libxml2-2.7.4.tar.gz

安装

cd libxml2-2.7.4

./configure && make && make install

##写测试代码

###生成xml的代码

int main(int argc, char **argv)

{

xmlDocPtr doc = NULL;

xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;

doc = xmlNewDoc(BAD_CAST "1.0");

root_node = xmlNewNode(NULL, BAD_CAST "root");

xmlDocSetRootElement(doc, root_node);

xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of node1");

node=xmlNewChild(root_node, NULL, BAD_CAST "node3",BAD_CAST"node has attributes");

xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");

node = xmlNewNode(NULL, BAD_CAST "node4");

node1 = xmlNewText(BAD_CAST"other way to create content");

xmlAddChild(node, node1);

xmlAddChild(root_node, node);

xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);

xmlFreeDoc(doc);

xmlCleanupParser();

xmlMemoryDump();

return(0);

}

编译 :

gcc -I /usr/local/include/libxml2 -L /usr/local/lib -lxml2 test.c -o test

执行

./test

解析xml

新建待解析xml, 文件内容:

John Fleck

June 2, 2002

example keyword

This is the headline

This is the body text.

###解析的c语言代码

#include

#include

#include

#include

#include

void

parseStory (xmlDocPtr doc, xmlNodePtr cur) {

xmlChar *key;

cur = cur->xmlChildrenNode;

while (cur != NULL) {

if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {

key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);

printf("keyword: %s\n", key);

xmlFree(key);

}

cur = cur->next;

}

return;

}

static void parseDoc(char *docname) {

xmlDocPtr doc;

xmlNodePtr cur;

doc = xmlParseFile(docname);

if (doc == NULL ) {

fprintf(stderr,"Document not parsed successfully. \n");

return;

}

cur = xmlDocGetRootElement(doc);

cur = xmlDocGetRootElement(doc);

if (cur == NULL) {

fprintf(stderr,"empty document\n");

xmlFreeDoc(doc);

return;

}

if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {

fprintf(stderr,"document of the wrong type, root node != story");

xmlFreeDoc(doc);

return;

}

cur = cur->xmlChildrenNode;

while (cur != NULL) {

if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){

parseStory (doc, cur);

}

cur = cur->next;

}

xmlFreeDoc(doc);

return;

}

int main(int argc, char **argv) {

char *docname;

if (argc <= 1) {

printf("Usage: %s docname\n", argv[0]);

return(0);

}

docname = argv[1];

parseDoc (docname);

return (1);

}

###编译 gcc keyword.c -o keyword -I/usr/local/include/libxml2 -lxml2

###运行 ./keyword story.xml

参考博文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值