首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用特定于语言的工具来进行 XML 处理

使用特定于语言的工具来进行 XML 处理

SAX 和 DOM 是两个主要的 XML 处理 API。开发人员通常知道最好的选择是 SAX(从解析器到分离处理程序的推式事件) 和 DOM(将文档解析成易于访问的对象树)的标准模型。SAX 通常为大文档提供了好的性能,而 DOM 通常提供了更直接的代码。SAX 设计用于 Java 语言,但是到其他语言的绑定已经开发出来了。然而,在这些其他语言中,SAX的 Java 特征通常展示出来了,而所使用的语言的优势则不再存在。DOM 设计为尽可能作为一种语言无关的方式,这一点在 ISO InterfaceDefinition Language (IDL)中指定了。标准绑定是为 Java 语言和 ECMAScript (JavaScript)而存在的,但这些依然会影响 IDL 的语言无关的结构,所有语言绑定,不管是官方的还是非官方的,也都取消了宿主语言的某些优势。
要更好地利用核心语言的优势,一些开发人员已经开发了本地针对特定语言的 XML 处理 API。几乎所有的知名语言都有一个或者多个工具包提供这种API。有些时间,常规方法一直坚持最好使用 SAX 和 DOM 以便最大限度地提高可移植性,但是经验告诉我,这通常只是一个言过其实的考虑。对于某件事情,由于SAX 和 DOM 的语言绑定有一些偏差,代码很少真正地进行跨语言移植,从一种语言到另一种语言移植时,进行代码改编的工作仍然相当重要。在同一种语言的多个实现之间,使用SAX 和 DOM 通常确实提高了可移植性,但这必须在事实中进行权衡,因为不采用某些语言的优势经常会降低程序员的效率。
拉式 API开发人员采用几种语言独立地进行早期探索的一个领域是         拉式DOM(pull DOM),这是一个包装了 SAX 的系统,所以系统能够从解析器拉事件而不是将事件推出去。这种调整通常允许更直接的代码,并且实现起来通常使用本机语言结构,这样获得比纯SAX 或者 DOM 更大的应用范围。        JavaSpecification Requests (JSR #173) for Streaming API for XML (StAX)是一个拉式解析 XML 的 Java API。其他拉式 API 包括用于 C、 C++、 Python、Perl 和其他语言的         libxml2'sxmlTextReader,它有 libxml2 包装器。Python 带有一个         xml.dm.pulldom 模块,它提供了一个拉式 API。      
编组程序和 XML 数据结构除了 SAX 和 DOM 之外,另一个早期惯用法是开发把 XML 转换成本机语言常用数据结构的工具 —— 一个叫做         编组(unmarshalling)的过程—— 与之相对的是        解组)。这个想法是为了使开发人员采用自己喜欢的特定语言,而不必真正考虑数据背后的XML 。不幸的是,许多开发人员不喜欢 XML,而这通常又是他们能够发现 XML 好处的唯一方式。但即使对于那些喜欢 XML 的开发人员,编组工具对于快速简洁地处理也是有用的:        JDOM是类似于 DOM 的 API,它严格局限于 Java 语言习惯;Python 用户有        ElementTree,它从 XML 创建专用的数据结构,重点是元素;Perl 用户现在更喜欢老式的        XML::Grove,它用一棵Perl 散列树来交换已解析的 XML、HTML 或者 SGML;Ruby 用户有        XMLification,用于 Ruby 对象到 XML 的非常简单的转换;PHP 可以选择        class_path_parser.php,它允许您为XML 源注册类似于 XPath 的表达式,并据此调度 PHP 处理器函数;Haskell 的选择是         Haskell2Xml,它允许您读取和编写普通的Haskell 数据作为 XML 文档。      
XML 数据绑定编组方法作为一种最流行的选择正显露出来,它使用 XML 模式语言和其他源代码用本机语言创建数据结构,这种结构使用了用XML 文档表达的词汇表。这种系统称为         XML数据绑定,在很多情况下,它们导致最自然合理的 XML 操纵。Java 技术用户可以看看        JSR#31, "XML Data Binding Specification"。        Castor、        JBind和        JiBX 工具与JAXB 有相似的特性。Python 用户有         Anobind、        gnosis.xml.objectify和         xmltramp,它们从直接检查源XML 代码开始操作,然后是         generateDS.py,它使用W3C XML Schema 来驱动绑定。Perl 的一个选项是         XML::Smart。      
结束语所以不管您喜欢哪种语言,都有很多种处理 XML 的选择。不要害怕抛弃常规方法而寻找两种主流方法以外的其他选择。
返回列表