Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换等功能。Libxml2的下载地址是
http://xmlsoft.org/
,完全版的库是开源的,并且带有例子程式和说明文件。最佳将这个库先下载下来,因为这样能查看其中的文件和例子。
由于我是在linux下用C语言进行研发的,所以我下载的是libxml2-2.6.20.tar.gz版本的源码包。
具体安装步骤:
解压:$tar zxvf libxml2-2.6.20.tar.gz
进入解压后的安装目录:$cd libxml2-2.6.20
安装三部曲:1 )$./configure
2 ) $make
3 ) $make install
安装完毕。
2.libxml资料查询
关于libxml库的相关头文件和API在这里我就不介绍了,内容太多,可以参考相关资料,进入libxml官方网站: http://xmlsoft.org/。
3.一个简单程序的编译
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<libxml/xmlmemory.h>
#include<libxml/parser.h>
int main()
{
xmlDocPtr doc=xmlNewDoc(BAD_CAST"1.0");
xmlNodePtr root_node=xmlNewNode(NULL,BAD_CAST"root");
xmlDocSetRootElement(doc,root_node);
xmlNewTextChild(root_node,NULL,BAD_CAST "newNode1",BAD_CAST "newNode1 content");
xmlNewTextChild(root_node,NULL,BAD_CAST "newNode2",BAD_CAST "newNode2 content");
xmlNewTextChild(root_node,NULL,BAD_CAST "newNode3",BAD_CAST "newNode3 content");
xmlNodePtr node=xmlNewNode(NULL,BAD_CAST "node2");
xmlNodePtr content=xmlNewText(BAD_CAST "NODE CONTENT");
xmlAddChild(root_node,node);
xmlAddChild(node,content);
xmlNewProp(node,BAD_CAST "attribute",BAD_CAST "yes");
node=xmlNewNode(NULL,BAD_CAST "son");
xmlAddChild(root_node,node);
xmlNodePtr grandson=xmlNewNode(NULL,BAD_CAST "grandson");
xmlAddChild(node,grandson);
xmlAddChild(grandson,xmlNewText(BAD_CAST "This is a grandson node"));
int nRel=xmlSaveFile("CreatedXml.xml",doc);
if(nRel!=-1)
{
xmlFreeDoc(doc);
return 1;
}
}
-
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c
-
xml-build.c:4:30: libxml/xmlmemory.h: 没有那个文件或目录
-
xml-build.c:5:27: libxml/parser.h: 没有那个文件或目录
-
xml-build.c:8: error: syntax error before "doc"
-
xml-build.c: In function `parseStory':
-
xml-build.c:9: error: `xmlChar' undeclared (first use in this function)
-
xml-build.c:9: error: (Each undeclared identifier is reported only once
-
xml-build.c:9: error: for each function it appears in.)
-
……
-
#include <libxml/xmlmemory.h>
-
#include <libxml/parser.h>
-
[nigelzeng@myhost xml-learning]$ ln -s /usr/include/libxml2/libxml /usr/include/libxml
-
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c
-
/tmp/cc62WqCk.o(.text+0x24): In function `parseStory':
-
: undefined reference to `xmlStrcmp'
-
/tmp/cc62WqCk.o(.text+0x3e): In function `parseStory':
-
: undefined reference to `xmlNodeListGetString'
-
/tmp/cc62WqCk.o(.text+0x62): In function `parseStory':
-
: undefined reference to `xmlFree'
-
/tmp/cc62WqCk.o(.text+0x85): In function `parseDoc':
-
: undefined reference to `xmlParseFile'
-
/tmp/cc62WqCk.o(.text+0xb7): In function `parseDoc':
-
: undefined reference to `xmlDocGetRootElement'
-
/tmp/cc62WqCk.o(.text+0xe4): In function `parseDoc':
-
: undefined reference to `xmlFreeDoc'
-
/tmp/cc62WqCk.o(.text+0xff): In function `parseDoc':
-
: undefined reference to `xmlStrcmp'
-
/tmp/cc62WqCk.o(.text+0x127): In function `parseDoc':
-
: undefined reference to `xmlFreeDoc'
-
/tmp/cc62WqCk.o(.text+0x14e): In function `parseDoc':
-
: undefined reference to `xmlStrcmp'
-
/tmp/cc62WqCk.o(.text+0x17c): In function `parseDoc':
-
: undefined reference to `xmlFreeDoc'
-
collect2: ld returned 1 exit status
-
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c -I/usr/include/libxml2/ -lxml2