【问题标题】:XML parsing javaXML解析java
【发布时间】:2011-02-17 22:56:25
【问题描述】:

我需要在 java 中解析一个构建树的 XML 文件(我正在使用 DOM),然后我需要使用节点(及其属性)创建对象。这是一种好的方法吗? 如果没有 SAX 或 DOM,我还能做同样的事情吗?

【问题讨论】:

    标签: java xml parsing


    【解决方案1】:

    JAXB 是从 XML 创建对象的标准方法。

    【讨论】:

    • 没错。 javax.xml.bind.* 包是 JDK 1.6 及更高版本的一部分。
    • JAXB 非常棒,只要您可以完全控制源(即可以相应地对其进行注释),如果不是,Sax/StAX 是您的下一个最佳选择。
    • 来源是指 XML 文件,对吗?是的,我可以完全控制它们。我有架构文件(*xsd)和 XML 文件(*apx)。顺便说一句,我得到了具有这些扩展名的文件,但被告知它们是 xml 文件。 apx 和 xsd 代表什么?
    • 为了全面披露,Blaise Doughan 是 JAXB 的团队负责人。
    • @duffymo - 我领导实现 JAXB 2 (JSR-222) 的 EclipseLink MOXy。 JAXB 标准还有其他实现,包括 Metro(参考实现)和 Apache JaxMe。
    【解决方案2】:

    SAX 和 DOM 是 XML 的两个标准解析器。 SAX 不会为您创建内存中的树;它会触发您可以根据需要做出响应的事件。 DOM 需要额外的步骤来解析 XML 并为您创建一个内存中的树,您可以使用标准 API 对其进行操作。

    如果您不需要 SAX 或 DOM,则意味着编写自己的解析器。你到底为什么要这么做?

    JAXB 是从 XML 创建对象的标准方法,它在后台重用标准解析器。

    【讨论】:

    • StAX (JSR-173) 和 JAXB (JSR-222) 也是处理 XML 的 Java 标准。
    • “正在重用标准解析器”是哪一个?
    • @pantelis - 我认为 duffymo 试图提出的观点是 JAXB 实现使用较低级别的 StAX 或 SAX 解析器实现(尽管这不是必需的)。
    【解决方案3】:

    有许多 XML 树模型在架构上类似于 DOM,但性能和可用性更好:我更喜欢 XOM,其他的是 JDOM 和 DOM4J。如果您确实需要使用这一级别的接口,那么 DOM 是一个非常差的选择:如果它不是唯一一个进入 JDK 的接口,那么没有人会使用它。 (但我个人的偏好是尽可能避免将 XML 数据低级转换为 Java 对象,而是使用 XSLT 和 XQuery 等面向 XML 的高级语言进行所有处理。)

    【讨论】:

      猜你喜欢
      • 2012-11-17
      • 2012-03-07
      • 2014-05-10
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多