xml库

导读:
  开放源码前三名
  三种最流行的开放源码 XML 库是 expat、libxml 和 Xerces。这三者都是跨平台的,每一种都充当 XSLT 库实现的基础,一旦满足了基本 XML 需要之后,它就会给您一条成长途径。
  * expat 是 James Clark 创始的开放源码面向事件的 XML 解析库。他已经将该项目转让给了 SourceForge 中的一个小组。有一个 SAX 封装器可供使用。在许多项目中都可以找到 expat 解析器,如开放源码浏览器 Mozilla、XSLT 处理器 Transformiix 和 RDF 工具 repat。
  * libxml 为类似于 SAX 和 DOM 的操作提供了双重方式 API。它支持对 DTD 的验证,并且在 Gnome 的 XSLT 处理器 libxslt中使用。libxml 经过重写,已作为 libxml(2) 发布,也许还称为 libxml2。这个库的用户应该确保他们拥有了当前版本。
  * Xerces 是非常坚固的、拥有大量文档的库,它充当 IBM alphaWorks XML4C 库的基础。Xerces 还用于 Apache XSLT 处理器 Xalan 中。Xerces 支持 DOM、SAX,以及对 DTD 的验证。最新版本读取并解释了部分“W3C XML 模式推荐”(打算到 2001 年底实现完整的 XML 模式支持)。
  将这三种最流行的库其中一种编译并链接到您的项目毫不费力。大多数软件包都包括了每个平台的详尽说明。这里是一些样本安装说明。
  在 Windows 上构建开放源码库
  在 Windows 上从头构建 libxml是很简单的四个步骤:
  1. 下载源 tarball 文件。
  2. 使用诸如 Winzip 之类的程序将内容解压缩到一个目录中。请确认指示了解压缩实用程序保留 libxml可能需要的任何子目录的路径名。
  3. 定位 ./win32/dsp 子文件夹中的 libxml2.dsw 文件,并从 MS Developer Studio 中打开它。
  4. 从 DevStudio 中的顶部菜单选择 Build All。这将构建所有样本和测试程序,以及运行它们所需的 libxml DLL。
  可以使用上述步骤在 Windows 上构建 Xerces。唯一的区别就是查找 ./c/samples/Projects/Win32/VC6 子文件夹中的 samples.dsw 工作空间文件。
  expat 已经开始包括了 DSP 项目 makefile。请查看 lib 和 xmlwf 子文件夹。
  推荐投诉

各类库比较分析:

1 Xerces

  参考网站: http://xml.apache.org/xerces-c/
 Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。
  不过我觉得我几百k的小程序,带一个1M多xerces-c_x.dll,非常不合理,而且Xerces绝大多数功能我不需要,别给我说xmlspy和style studio使用它。
2 CMarkup
大名鼎鼎的开源软件FtpZilla使用,使用非常方便,将xml封装成了stl,不过商业版本要收费,无法考虑。
3 libxml
  GNU的开源xml解析器,支持跨平台。貌似不错,但是内置UTF-8,使用时必须带iconv,还需要带库,不是源码集成,不是很方便。
4 libxml++
  libxml 解析器的C++封装版本,libxml 不考虑,他也就算了。
5 tinyxml
  使用起来比较简单,有几个小bug,商业版本谨慎使用。
 
 Xerces Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。

 JDOM JDOM是一种面向Java的读、写和操作XML文档的API。JDOM 与现行的SAX 和DOM标准兼容,为Java 程序员提供了一个简单、轻量的XML文档操作方法。由于JDOM是专门为Java 程序员开发的,所以采用许多Java语言的优秀特性,比如方法重载、集合(Collections)和类映射(Reflection)。 

 dom4j Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 

 XOM XOM虽然也是一种面向对象的XML API,类似于DOM 的风格,但是它有一些与众不同的特性比如严格保持内存中对象的不变性,从而使XOM实例总是能序列化为正确的XML。此外,与其他Java XML API相比,XOM 追求更简单和更正规。

 JiBX JiBX是一个为Java提供的XML数据绑定框架。它可以和现存的类一起运行,使用一个灵活的映射定义文件来决定如何将数据对象转换成XML。

 KXML KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合。它有一个非常独特的DOM操作方法和被称为Pull的语法分析方法。它有以下性能:   
· 支持XML名称空间   
· 用"松散"模式分析HTML或其它SGML格式   
· 占用很少的存储空间(21 kbps)   
· 基于Pull的分析   
· 支持XML写操作   
· 可选的DOM支持   
· 可选的WAP支持 

 XMLBeans XMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。Eclipse支持插件:xmlbeansplug(在线更新地址)。

 jConfig 因为properties的局限性,有时候得使用XML文件来定义应用的配置参数,jConfig 正是这样一个读写XML配置文件的工具。开发者在 Java 程序中只需要使用get/set方法就能读取修改 XML 文件中的配置参数。jConfig 目前只支持两层结构,最新版本为 2.3。 

 XStream XStream使用起来非常简单,不需要预先生成相关的辅助类,不需要映射文件。当然,使用简单也注定了它只能处理简单结构的 XML 文件。 

 XJR 一个XML的Java绑定框架,它的主要特点是不需要映射文件,用XJRDTDCompiler直接通过DTD文件生成Java文件,也可以用 XJRDTDCreator对Java类处理生成DTD文件。当然也有不足,就是还不支持Schema。 

 Piccolo XML Parser Piccolo是利用java快速解析XML文档的开源项目。它实现 SAX 1, SAX 2.0.1, and JAXP 1.1 接口作为一个(Non-validating)非验证剖析器。

 NanoXML NanoXML是一个能在CLDC 环境下运行的开放源代码非确认性(不做验证工作直接进行解析)的XML 分析器。Nanoxml是一步解析器(非常小6KB的XML解析器),一次就把文档解析完并以一个树状的结构传回。

 XP Parser XP是一个Java开发的XML1.0解析器.它当前是一个非验证解析器,然而它可以解析所有外部实休:外部DTD子集,外部参数实体,普通的外部实体.

 Commons-Digester Digester基于规则的XML文档解析,主要用于XML到Java对象的映射.

 NunniMJAX NunniMJAX是一个Java非验证XML解析器。它的APIs与功能类似于SAX.这意味着你如果熟悉SAX你将很容易掌握这个解析器。

 Crimson Crimson是一个基于Java的XML解析器.它通过JAXP1.1,SAX2.0,SAX2扩展版本1.0,DOM Level 2 Core Recommendation来支持XML1.0.

 JOX JOX是一组Java类库,它使得在XML文档与Java Beans之间进行数据转换变得容易.你可以把JOX想象成Java对象序列化(Java Object Serialization)的一个种特殊形式,利用XML作为序列化的格式.

 JaxMe JaxMe是对JAXB(Java/XML绑定规范)的一种开放源代码实现。它对基本的JAXB 规范作了一些改进之外并且集成了数据库和Enterprise JavaBeans.

 XMLConfigReader  XMLConfigReader是对Java ResourceBundle类的一个开源扩展.利用它可以直接从XML文件中读取配置数据并把数据存储在一个HashTable中.

 JVoiceXML JVoiceXML一个开源的VoiceXML解析器.

 Woodstox Woodstox是一个快速开源且符合StAX(STreaming Api for Xml processing)规范的XML处理器(做为一个处理器意味着它可以处理输入(相当于解析)与输出(相当于写入,序列化))。

 xalan xalan-java是一套xslt处理器,用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH 1.0版。开发人员可以通过命令行方式或在JAVA APPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformation API for XML(TRaX)接口,此接口为jaxp1.2标准中的一部分。

 XmlIO XmlIO是一个利用SAX来解析XML然后创建Java对象并同时调用这些对象setter方法的框架.这个框架还能够把一张包含有单个根节点的Java对象图序列化成XML格式的字符串。

 VTD-XML VTD-XML是一种新的XML处理API,它能够克服DOM和SAX的一些问题。VTD-XML能够在内存中对XML进行快速检查并提供XPath查询支持。 在它的主页上有详细的API描述,源代码,文档和例子。

 Nux Nux是一个开源的Java工具,它能够让XML高效处理变得容易。Nux可嵌入到具有高吞吐量的XML消息中间件中比如:大型p2p底层结构,消息队列,发布-订阅和Blogs/新闻聚合的matchmaking系统,分布式系统,防火墙等.Nux集成并扩展XOM,Saxon和Lucene这些优秀的开源组件包以提供XQuery/XPath,全文本搜索等功能。

 StAX StAX(Streaming API for XML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。StAX是一个用Java实现的XML拉式解析器。 

 Skaringa Skaringa提供一个类库实现Java object与XML文档的相互转换,并能够为Java class生成XML schema定义。

 X2JB X2JB是一个Java开发类包用于把XML映射成Java实体。实际上它与JAXB、XML Beans、Jakarta Commons Digester 等相似但没有它们复杂。X2JB使用注释(annotation)来映射XML元素和元素属性。 
 
JAXP(Java API for XML Processing)包含javax.xml.parsers和transform;其中parsers包中包括4个主要类SAXParser和SAXParserFactory类创建SAX XMLReader接口例程,DocumentBuilder和 DocumentBuilderFactory类创建DOM Document接口例程。

    DOM4J:一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

    XERCES:Xerces是由Apache组织所推动的一项XML文档解析开源项目,支持文档对象模型(DOM)和XML简单应用编程接口(SAX)。对于DOM解析,有DOMParser和IDOMParser;对于SAX解析,有SAXParser。它目前有多种语言版本包括JAVA、C++、PERL、COM等。

    仅基于DOM的:
    JDOM:Jason Hunter和Brett McLaughlin开发的项目,JDOM的设计目标就是在读和创建XML时简化DOM,取代DOM。
    微软的MSXML解析器:微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库(C
语言)
    仅基于SAX的:
    StAX(Streaming API for XML ):JSR-173 提出了一种面向流的新方法。其目的,简化编程,取代SAX。JDK6.0中除了DOM和SAX之外集成的又一种处理XML文档的API。

    其他:
    XALAN:xalan-java是一套xslt处理器,用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH 1.0版。开发人员可以通过命令行方式或在JAVA APPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformation API for XML(TRaX)接口,此接口为jaxp1.2标准中的一部分。 

 

http://lars.ruoff.free.fr/xmlcpp/   列出了常用的XML库

现在用的功能基本是traverse功能,而不是写XML文件

用过的比较好用的: CMarkup  www.firstobject.com  C 库,使用简单,文档详细,在WINCE上速度可以

CMarkup使用UNICODE是定义MARKUP_STL,MARKUP_WCHAR

PugiXML  很好,就4个文件,添加方便,例子教的使用也好!

http://rapidxml.sourceforge.net/manual.html

http://www.ffuts.org/blog/quick-notes-on-how-to-use-rapidxml rapidxml的一个教程

那么再只好选pugixml,这个也还好用,没有用模板!

pugixml要使用UNICODE的话,是定义这个宏PUGIXML_WCHAR_MODE ,因为它不是使用模板!

pugixml如果要保留注释的话,需要使用

http://code.google.com/p/pugixml/issues/detail?id=50

http://pugixml.org/

pugi::xml_parse_result result = parser.load_buffer_inplace((void*)content.c_str(),
  content.length()*sizeof(wchar_t), pugi::parse_comments|pugi::parse_declaration);

pugixml保存到文件:如果没有wchar_t的保存文件函数,要把文件名转为char的也是保存的一样的内容(如源文件为UNICODE,保存的也是UNICODE,源文件是UTF8的话,保存的也是UTF8)

  char szTempBuf[MAX_PATH+1] = {0};
  ::WideCharToMultiByte(CP_ACP, 0, m_strWriteFile, -1, szTempBuf, MAX_PATH, 0, 0);
  parser.save_file(szTempBuf);

如果读出来的数据是UNICODE的话,保存文件parser.save_file会默认保存为UNICDOE有UNICODE BOM,如果读出来的是UTF8的,却不会写UTF8 BOM头。

在文件的beging加内容的唯一办法是把整个文件读出来重新写过。

http://forums.whirlpool.net.au/archive/362008

The only way to do this is to rewrite the file out completely.
This isn't a limitation of C++, it's just the way most OSs' file manipulation functions work.

不过很可惜,rapidxml在VC6和EVC4下不能正常工作,同一个例程在VS2005和VS2008上就能正常工作!

richardwb
Monday, April 5, 2010 @ 12:53

I don't believe RapidXML has any support for Visual C 6 which is over a decade old by this point. I'm sure you've heard this before but you should really consider moving to a modern C compiler. Microsoft does provide a free copy ofVisual Studio 2008 Express which is quite capable.

http://lars.ruoff.free.fr/xmlcpp/

 

Xalan : XML XSLT apache的另一个xml解析库http://xalan.apache.org/

 
MSxml 是基于COM的 实在是
 
C++ POCO库里的XML库。http://pocoproject.org/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值