一、简介

expat是一个由C语言编写的XML解析库。James Clark创建了这个库,现在是制定XML标准的W3组织的技术leader。现在的版本是2.0。2.0开始就由Clark Cooper领导的开发组在sourceforge.net负责开发。

expat是一个基于SAX模型的、非验证(默认,v1.2开始提供验证接口,需要用户手动处理)的轻量级XML解释器。目前XML的解析主要有两大模型:SAX和DOM。其中SAX(Simple API for XML)是基于事件的解析方法。基本工作原理是分析XML文档,通过触发事件来通知用户解析的结果。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。而DOM(DocumentObject Model),则是一次性将整个XML文档进行分析,在内存中以树结构保存解析结果。同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。

对于一个特定的XML文档而言,其正确性分为两个层次。首先是其格式应该符合XML的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的XML文件,称作well-formatted。但除此之外,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。

因此,解析器也分为验证和非验证两种。是验证的会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。非验证性的则忽略DTD文件,只要基本格式正确,就可以进行解析。常见XML解析库总结如下:

参考:http://www.xml.com/pub/a/1999/09/expat/index.html

二、API

expat-1.2.tar.gz下载

三、实例

示例1:example1.c

#include <stdio.h>
#include <stdlib.h>
#include "xmlparse.h" void startElement (void *userData, const char *name, const char **atts)
{
int i;
int *depthPtr = userData;
for (i = 0; i < *depthPtr; i++)
printf("\t");
puts (name); for (i = 0; atts[i]; i += 2)
{
printf("\t%s='%s'", atts[i], atts[i + 1]);
} printf("\n");
*depthPtr += 1;
} void endElement (void *userData, const char *name)
{
int *depthPtr = userData;
*depthPtr -= 1;
} int main (int argc, char *argv[])
{
char buf[BUFSIZ];
XML_Parser parser = XML_ParserCreate (NULL);
int done;
int depth = 0;
FILE *fp; if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(0); }
if ((fp = fopen(argv[1], "r")) == NULL)
{
printf("Can't open %s\n", argv[1]);
exit(1); } XML_SetUserData (parser, &depth);
XML_SetElementHandler (parser, startElement, endElement);
do
{
size_t len = fread (buf, 1, sizeof (buf), fp);
// done = len < sizeof(buf);
done = feof (fp);
if (!XML_Parse (parser, buf, len, done))
{
fprintf (stderr, "%s at line %d\n", XML_ErrorString (XML_GetErrorCode (parser)), XML_GetCurrentLineNumber (parser));
return 1;
}
}
while (!done);
XML_ParserFree (parser);
return 0;
}

编译

gcc -g -o example1 example1.c -I/root/srcpkg/expat-1.2/xmlparse -L/root/srcpkg/expat-1.2/xmlparse -static -lexpat

运行

EXPAT(XML解析库)的更多相关文章

  1. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  2. GDataXMLNode:xml解析库

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  3. Swift XML解析库 - SwiftyXMLParser

    经过在CocoaPods中筛选以后,发这个这个比较好用,整理出来 如果有需要可以在Pods命令端输入: pod search xml 这样会搜索出很多相关Xml的第三方库 SwiftyXMLParse ...

  4. 第三方:GDataXMLNode:xml解析库--备用

    一.GDataXMLNode说明   GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且 ...

  5. Python的html和xml解析库Beautiful Soup

    网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

  6. XML解析器(转)

    常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触 ...

  7. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  8. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  9. BeautifulSoup解析库

    解析库 解析器 使用方法 优势 劣势 Python标准库 BeautifulSoup(html, 'html.parser') 速度适中,容错能力强 老版本python容错能力差 lxml HTML解 ...

随机推荐

  1. C#中 ThreadStart和ParameterizedThreadStart区别

    最主要区别: 1.Thread 是启动一个线程,但是没有参数. 2.ParameterThreadStart  线程可以接受一个输入参数 ThreadStart: ThreadStart这个委托定义为 ...

  2. 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

    转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...

  3. 网络基础知识 tcp

    网络基础相关的知识(1)架构a. C / S架构: client客户端和server服务器端 优势: 能充分发挥PC机的性能b. B / S架构: browser浏览器和server服务器 隶属于C ...

  4. mysql Date查询当天、本周,本月,上一个月的数据

      出自:http://www.cnblogs.com/benefitworld/p/5832897.html 今天 select * from 表名 where to_days(时间字段名) = t ...

  5. HTML|CSS之布局相关总结

    知识内容: 1.浮动相关 2.display属性 3.居中显示 4.盒模型和box-sizing 5.position属性 6.响应式设计 7.flex布局 8.其他 参考:http://zh.lea ...

  6. mysql5.6下载&安装

    官网下载即可: mysql-installer-community-5.6.25.0.msi 安装: 1. 2. 3.在这里我们需要从安装程序提供的可安装的产品(Products)中选择我们需要的my ...

  7. 本地git仓库常用操作

    SSH配置: 本机创建SSH key $ ssh-keygen -t rsa -C "youremail@example.com" 将SSHkey添加到git仓库:id_rsa.p ...

  8. location 对象属性

    Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路 ...

  9. jsp访问java变量

    jsp页面中javascript访问 java的变量 <%= JAVA变量名%> jsp中嵌入java代码<%java代码%> --变量<% String JAVASOu ...

  10. select(下拉标签和textarea(文本框)

    Title 北京 南京 天津 武汉 石家庄 太原 dsadasd   <!DOCTYPE html> <html lang="en"> <head&g ...