开放源码前三名
三种最流行的开放源码 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
JDOMJDOM是一种面向Java的读、写和操作XML文档的API。JDOM与现行的SAX和DOM标准兼容,为Java程序员提供了一个简单、轻量的XML文档操作方法。由于JDOM是专门为Java程序员开发的,所以采用许多Java语言的优秀特性,比如方法重载、集合(Collections)和类映射(Reflection)。
dom4jDom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
XOMXOM虽然也是一种面向对象的XMLAPI,类似于DOM的风格,但是它有一些与众不同的特性比如严格保持内存中对象的不变性,从而使XOM实例总是能序列化为正确的XML。此外,与其他JavaXMLAPI相比,XOM追求更简单和更正规。
JiBXJiBX是一个为Java提供的XML数据绑定框架。它可以和现存的类一起运行,使用一个灵活的映射定义文件来决定如何将数据对象转换成XML。
KXMLKXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合。它有一个非常独特的DOM操作方法和被称为Pull的语法分析方法。它有以下性能:
·支持XML名称空间
·用"松散"模式分析HTML或其它SGML格式
·占用很少的存储空间(21kbps)
·基于Pull的分析
·支持XML写操作
·可选的DOM支持
·可选的WAP支持
XMLBeansXMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。Eclipse支持插件:xmlbeansplug(在线更新地址)。
jConfig因为properties的局限性,有时候得使用XML文件来定义应用的配置参数,jConfig正是这样一个读写XML配置文件的工具。开发者在Java程序中只需要使用get/set方法就能读取修改XML文件中的配置参数。jConfig目前只支持两层结构,最新版本为2.3。
XStreamXStream使用起来非常简单,不需要预先生成相关的辅助类,不需要映射文件。当然,使用简单也注定了它只能处理简单结构的XML文件。
XJR一个XML的Java绑定框架,它的主要特点是不需要映射文件,用XJRDTDCompiler直接通过DTD文件生成Java文件,也可以用XJRDTDCreator对Java类处理生成DTD文件。当然也有不足,就是还不支持Schema。
PiccoloXMLParserPiccolo是利用java快速解析XML文档的开源项目。它实现SAX1,SAX2.0.1,andJAXP1.1接口作为一个(Non-validating)非验证剖析器。
NanoXMLNanoXML是一个能在CLDC环境下运行的开放源代码非确认性(不做验证工作直接进行解析)的XML分析器。Nanoxml是一步解析器(非常小6KB的XML解析器),一次就把文档解析完并以一个树状的结构传回。
XPParserXP是一个Java开发的XML1.0解析器.它当前是一个非验证解析器,然而它可以解析所有外部实休:外部DTD子集,外部参数实体,普通的外部实体.
Commons-DigesterDigester基于规则的XML文档解析,主要用于XML到Java对象的映射.
NunniMJAXNunniMJAX是一个Java非验证XML解析器。它的APIs与功能类似于SAX.这意味着你如果熟悉SAX你将很容易掌握这个解析器。
CrimsonCrimson是一个基于Java的XML解析器.它通过JAXP1.1,SAX2.0,SAX2扩展版本1.0,DOMLevel2CoreRecommendation来支持XML1.0.
JOXJOX是一组Java类库,它使得在XML文档与JavaBeans之间进行数据转换变得容易.你可以把JOX想象成Java对象序列化(JavaObjectSerialization)的一个种特殊形式,利用XML作为序列化的格式.
JaxMeJaxMe是对JAXB(Java/XML绑定规范)的一种开放源代码实现。它对基本的JAXB规范作了一些改进之外并且集成了数据库和EnterpriseJavaBeans.
XMLConfigReaderXMLConfigReader是对JavaResourceBundle类的一个开源扩展.利用它可以直接从XML文件中读取配置数据并把数据存储在一个HashTable中.
JVoiceXMLJVoiceXML一个开源的VoiceXML解析器.
WoodstoxWoodstox是一个快速开源且符合StAX(STreamingApiforXmlprocessing)规范的XML处理器(做为一个处理器意味着它可以处理输入(相当于解析)与输出(相当于写入,序列化))。
xalanxalan-java是一套xslt处理器,用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH1.0版。开发人员可以通过命令行方式或在JAVAAPPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformationAPIforXML(TRaX)接口,此接口为jaxp1.2标准中的一部分。
XmlIOXmlIO是一个利用SAX来解析XML然后创建Java对象并同时调用这些对象setter方法的框架.这个框架还能够把一张包含有单个根节点的Java对象图序列化成XML格式的字符串。
VTD-XMLVTD-XML是一种新的XML处理API,它能够克服DOM和SAX的一些问题。VTD-XML能够在内存中对XML进行快速检查并提供XPath查询支持。在它的主页上有详细的API描述,源代码,文档和例子。
NuxNux是一个开源的Java工具,它能够让XML高效处理变得容易。Nux可嵌入到具有高吞吐量的XML消息中间件中比如:大型p2p底层结构,消息队列,发布-订阅和Blogs/新闻聚合的matchmaking系统,分布式系统,防火墙等.Nux集成并扩展XOM,Saxon和Lucene这些优秀的开源组件包以提供XQuery/XPath,全文本搜索等功能。
StAXStAX(StreamingAPIforXML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。StAX是一个用Java实现的XML拉式解析器。
SkaringaSkaringa提供一个类库实现Javaobject与XML文档的相互转换,并能够为Javaclass生成XMLschema定义。
X2JBX2JB是一个Java开发类包用于把XML映射成Java实体。实际上它与JAXB、XMLBeans、JakartaCommonsDigester等相似但没有它们复杂。X2JB使用注释(annotation)来映射XML元素和元素属性。
http://lars.ruoff.free.fr/xmlcpp/ 列出了常用的XML库
用过的比较好用的: CMarkupwww.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
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,m_strWriteFile,-1,szTempBuf,MAX_PATH,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上就能正常工作!
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/