java - 我的应用程序中要使用什么 Java XML API - StAX 还是 DOM?

标签 java xml dom stax

我做了一些研究,查看了底部的表格 (1),我试图找出我应该使用哪种 API。

让我介绍一下我的应用程序要解决的问题:

我的应用程序监听某些观察者类中从所有位置(例如来自 CDI 的事件)触发的一些观察者事件。在该类中,有一些方法可以观察这些事件。

我需要在观察这些事件时即时构建 XML 文件。更具体地说,当我观察事件“start”时,我需要创建此 xml。

<start></start>

之后,当我观察到其他一些事件时,例如“已安装”(实际上如何调用它并不重要),我需要具有以下结构:

<start><installed></installed><start>

每次我观察到某个事件时,我都需要能够将该 XML 表示形式写入外部文件。总而言之,我似乎不能使用“SAX”,因为SAX只是解析XML文档,但我需要编写它们或构造它们。接下来,我将要使用 StAX 或 DOM,但 StAX 是“仅向前”,我不太明白它代表什么,但是当我使用 StAX API 时,它的行为如下(2),当它是“向前”时,我是“强制”手动启动和结束元素,但这不适用于我的情况。我不知道什么时候结束文档生成,我只需要每次都有有效的 xml 来编写它。

但是,有一个方法(3),它说当我调用它时,它会自动关闭所有元素。所以例如当我有这个时:

<a>
    <b></b>
    <c>
        <d>
        </d>

我调用writeEndDocument(),这是否意味着它会自动关闭“c”和“a”?

(1) http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

(2) http://docs.oracle.com/javase/tutorial/jaxp/stax/example.html#bnbgx

(3) http://docs.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriter.html#writeEndDocument()

最佳答案

我建议使用以下 XML 库(按推荐顺序排列;如果前一个库不适合您的需要,则仅使用下一个库):

  1. JAXB(使用对象而不是 XML)
  2. StAX(低于 JAXB 级别)
  3. SAX(仅用于阅读;现在 JAXB 和 StAX 可用时应该很少使用)
  4. DOM(现在应该很少使用,因为 JAXB 和 StAX 可用)

关于java - 我的应用程序中要使用什么 Java XML API - StAX 还是 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407751/

相关文章:

java - 多服务器到单服务器

android - 以编程方式将 Fragment 添加到 Kotlin 中的 Activity

c# - XmlReader 跳过元素

javascript - 提高 UI 响应能力的技巧有哪些?

java - Ruby Compass 编译器输出

java - 从 JAR 加载资源而不访问 ClassLoader?

java - 如何处理来自 Callable<Void> 的异常

xml - 如何使用最新版本的 org.clojure/data.xml 生成没有命名空间的 XML

javascript - 使用 Javascript 简单添加类

javascript - 为什么我需要 4 previousSibling 才能获取 2 个前一个元素?