【问题标题】:Which Java XML parser to use? [closed]使用哪个 Java XML 解析器? [关闭]
【发布时间】:2012-06-15 15:01:43
【问题描述】:

我从这个link 发现Java 中有几种类型的XML 解析器。你能帮我选择哪一个会消耗更少的内存并且工作得更快吗:

DOM XML Parser
SAX XML Parser
JDOM XML Parser
JAXB

我想用 C 客户端创建 Java 服务器应用程序,它使用 XML 通过网络进行通信。 如果我选择使用 JAXB,我可以轻松地将它与 libxml 集成吗?如果我使用 JAXB 和libxml 在应用程序之间传输数据,可能会出现哪些问题?

【问题讨论】:

    标签: java xml jaxb xml-parsing


    【解决方案1】:

    这些更多的是解析技术,而不是实际的解析工具。 Xerces 就是一个解析工具的例子。

    SAX 有利于速度和解析事件处理。从事件中解析可以很容易地让你跳过不感兴趣的事件,并且跳过的惩罚很低。在读取整个文档时,无需存储它,因此 SAX 可以处理大于系统内存的文档。

    DOM 非常适合将整个文档保存在内存中。这样做很容易让您完成需要文档的所有元素(交叉引用等)的工作。这种便利是有代价的,与 SAX 不同,您必须有足够的内存来保存整个文档。

    JDOM 基本上是 DOM,但具有不同的编程接口。它假设它的编程接口更符合 Java,不管这意味着什么。

    JAXP 是一套 XML 处理工具,它以可插入的方式包含 SAX 和 DOM 接口,可让您轻松更换后端实现。

    JAXB 是一套 XML 处理工具,可方便地将 XML 映射到常规 Java 对象,以及从常规 Java 对象生成 XML。

    就我个人而言,我喜欢 SAX,但是为了使用 SAX 进行高效解析,您应该使用堆栈和上下文相关的解析器块,这些块被压入堆栈并从中弹出,从而产生 XML 映射到的对象。这个想法是您将您在文档中的位置保持为 StringBuffer,然后推入一个处理程序来处理进入元素,然后处理所有事件,直到它检测到正确的退出事件。然后上面的处理程序从弹出的子处理程序中读取对象。像这样的技术需要一些工作,但可以将 SAX 的速度与 DOM 的便利性结合起来,生成您自己的对象树(而不是“节点”树)。

    【讨论】:

    • +1 使用堆栈。
    • JAXP 是一套 XML 处理工具,JAXB 用于将域对象转换为 XML。
    • 对不起,一定是看错了P。你说的很对,会更新答案。
    【解决方案2】:

    DOM 将使用更多内存 - 您将需要在内存中创建整个 xml DOM 模型。因此 SAX 或 STAX 将允许解析您需要的内容并节省内存。

    JAXB 允许您自动从 beans 映射到 xml 和反向。

    【讨论】:

      【解决方案3】:

      如果你想使用更少的内存,我会选择 SAX。它是一个基于事件的解析实用程序。整个 XML 文件不会像 DOM 对象那样加载到内存中。你把你想保存的东西保存在内存中。 SAX 的另一个好处是你只控制你想要的事件,这确实可以提高解析的速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-13
        • 2011-08-22
        • 2011-01-08
        • 2011-06-29
        • 1970-01-01
        • 2011-07-25
        • 2010-09-27
        • 1970-01-01
        相关资源
        最近更新 更多