目前三种最流行的开源 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示例
1、story.xml
2、keyword.c
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <libxml/xmlmemory.h>
- #include <libxml/parser.h>
- 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);
- 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);
- }
3、编译运行
[root@localhost txlib]# gcc keyword.c -o keyword -I/usr/local/include/libxml2 -lxml2 [root@localhost txlib]# [root@localhost txlib]# ./keyword story.xml keyword: example keyword
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。