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
参考网站:
http://www.firstobject.com/xml.htm
大名鼎鼎的开源软件FtpZilla使用,使用非常方便,将xml封装成了stl,不过商业版本要收费,无法考虑。
3 libxml
GNU的开源xml解析器,支持跨平台。貌似不错,但是内置UTF-8,使用时必须带iconv,还需要带库,不是源码集成,不是很方便。
4 libxml++
libxml 解析器的C++封装版本,libxml 不考虑,他也就算了。
5 tinyxml
使用起来比较简单,有几个小bug,商业版本谨慎使用。
XercesXerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。
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元素和元素属性。
JAXP(Java API for XML Processing)包含javax.xml.parsers和transform;其中parsers包中包括4个主要类SAXParser和SAXParserFactory类创建SAX XMLReader接口例程,DocumentBuilder和
DocumentBuilderFactory类创建DOM Document接口例程。
http://lars.ruoff.free.fr/xmlcpp/ 列出了常用的XML库 现在用的功能基本是traverse功能,而不是写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如果要保留注释的话,需要使用 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(), pugixml保存到文件:如果没有wchar_t的保存文件函数,要把文件名转为char的也是保存的一样的内容(如源文件为UNICODE,保存的也是UNICODE,源文件是UTF8的话,保存的也是UTF8) char szTempBuf[MAX_PATH+1] = {0}; 如果读出来的数据是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. 不过很可惜,rapidxml在VC6和EVC4下不能正常工作,同一个例程在VS2005和VS2008上就能正常工作!
http://lars.ruoff.free.fr/xmlcpp/ Xalan : XML XSLT apache的另一个xml解析库http://xalan.apache.org/
slixml
http://code.google.com/p/slimxml/
MSxml 是基于COM的 实在是
C++POCO库里的XML库。http://pocoproject.org/
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何用带有面部特征的openCV训练支持向量机(svm)分类器?
- 红宝石 – 覆盖了一个Mongoid模型的设置者和吸烟者
- c# – 如何将DataGridViewCell设置为自动换行?
- c# – 参数化查询与SQL注入
- 使用最新的GCC进行iOS开发以获得c11功能是个好主意吗?
- ruby-on-rails-4 – Rails 4:如何从数据库中删除或删除(连
- reactjs – 在React组件中处理多个onChange回调
- DataGrid、MSFlexGrid与MSHFlexGrid区别
- ruby-on-rails – Rails / Ruby – 什么宝石可以用文本创建
- vue中关闭eslint的方法分析