在使用 java 输入和输出 xml 的所有库中,在哪些情况下 commons-digester 是首选工具?
3 回答
来自消化器维基
为什么要使用消化器?
Digester 是 SAX xml 解析器 API 之上的一个层,可以更轻松地处理 xml 输入。特别是,digester 使得基于 xml 输入文件创建和初始化对象树变得容易。
Digester 最常见的用途是处理 xml 格式的配置文件,根据该信息构建对象树。
请注意,digester 可以创建和初始化真实对象,即与应用程序的业务目标相关并具有真实行为的事物。许多其他工具有不同的目标:在输入 XML 文档中构建数据模型,就像 W3C DOM 所做的那样,但更友好一些。
和
与生成类的工具不同,您可以先编写应用程序的类,然后再决定使用 Digester 从 xml 输入文件构建它们。结果是您的类是具有真实行为的真实类,恰好是从 xml 文件初始化的,而不是仅保存数据的简单“结构”。
作为它不用于的示例:
但是,如果您正在寻找输入 xml 文档的直接表示,作为数据而不是真实对象,那么 digester 不适合您;DOM、jDOM 或其他更直接的绑定工具会更合适。
因此,digester 会将 XML 直接映射到 java 对象中。在某些情况下,这比通读树并提取选项更有用。
我的第一个想法是“从不”……但也许它有它的位置。我同意 eljenso 的观点,即它已被竞争超越。
因此,对于高效且简单的对象绑定/映射,JAXB或XStream更好。更方便,甚至更快。
编辑 2019:还有,Jackson XML,在方法上类似于 JAXB,但使用 Jackson 注释
如果您想从 XML 创建和初始化“真正的”对象,请使用一个像样的 bean 容器,例如 Spring 提供的容器。
此外,使用 XPath 或使用 Java/XML 绑定工具(如 Castor)读取 XML 并自行处理它是很好的并且可能是更标准的替代方案。
在使用 Struts 时,我曾使用过 Digester,但它的可能用途似乎已被其他工具和框架超越。