目前三种最流行的开源 c/c++解析xml库:libxml、Xerces、expat,且三者都是跨平台的。
Xerces-C++ (C++版本):
http://xerces.apache.org/xerces-c/index.html
xerces2-j (java版本): http://xerces.apache.org/xerces2-j/
xerces2-j (java版本): http://xerces.apache.org/xerces2-j/
java版dom及sax方式解析示例:
一、libxml库下载
libxml官网:
http://www.xmlsoft.org
libxml库下载: ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz
libxml文档下载: ftp://xmlsoft.org/libxml2/libxml-docs.tar.gz
libxml库下载: ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz
libxml文档下载: ftp://xmlsoft.org/libxml2/libxml-docs.tar.gz
二、libxml安装
#解压安装文件
[root@localhost xmllib]# tar -xzvf libxml2-git-snapshot.tar.gz
[root@localhost xmllib]# tar -xzvf libxml2-git-snapshot.tar.gz
#然后cd进入解压后的目录,运行初始配置文件,也可使用 ./configure --prefix=$HOME/libxml 指定安装目录
#不指定安装目录,则默认安装在系统目录 /usr/local/include/libxml2
[root@localhost libxml2-2.8.0]# ./configure
#不指定安装目录,则默认安装在系统目录 /usr/local/include/libxml2
[root@localhost libxml2-2.8.0]# ./configure
#make编译
[root@localhost libxml2-2.8.0]# make
[root@localhost libxml2-2.8.0]# make
#make install安装
[root@localhost libxml2-2.8.0]# make install
[root@localhost libxml2-2.8.0]# make install
(libiconv-1.11.tar.gz),安装与上同)
三、libxml示例
libxml 支持dom和sax方式解析,下面是从文档里抽取的一个示例(更多的实现,可参考API文档及sample文档):
1、story.xml
- <?xmlversion="1.0"?>
- <story>
- <storyinfo<author>John Fleck/author<datewritten>June 2,2002/datewritten<keyword>example keyword/keyword/storyinfo<body<headline>This is the headline/headline<para>This is the body text./para/body/story>
2、keyword.c
#include<stdio.h>
#include<string>
#include<stdlib<libxml/xmlmemory/parser>
void
parseStory(xmlDocPtr doc){
xmlChar*key;
cur=cur->xmlChildrenNode;
while(cur!=NULL{
if(!xmlStrcmp>nameconstxmlChar*)"keyword"{
key=xmlNodeListGetString(doc1;
printf("keyword: %s\n";
xmlFree(key}
cur>next}
return}
static void
parseDoc(char*docname{
xmlDocPtr doc;
xmlNodePtr cur;
doc=xmlParseFile(docname;
{
fprintf(stderr"Document not parsed successfully. \n";
return}
cur=xmlDocGetRootElement"empty document\n";
xmlFreeDoc}
(xmlStrcmp"story""document of the wrong type,root node != story""storyinfo"{
parseStory}
xmlFreeDoc}
int
mainintargc*argv{
char(argc=1{
printf"Usage: %s docname\n"[0](0}
docname=argv[1;
parseDoc;
return(1}