【问题标题】:Reading large xml files one node at a time in Java with a pull parser?使用拉解析器在Java中一次读取一个节点的大型xml文件?
【发布时间】:2010-11-20 16:04:26
【问题描述】:

我想解析大型 XML 文件并从 Java 一次读取一个完整的节点。这些文件太大了,无法放入树中。如果可能的话,我想使用拉解析器,因为它似乎更容易编程。给定以下 XML 数据
而不是在使用 StAX 解析器时检查每个事件,我希望每次调用 hasNext 或一些类似的函数来返回一个包含记录节点上完整信息的对象。当使用 Perl XML::LibXML::Reader 时,我可以使用它的 read 方法来执行此操作,因此我正在寻找 Java 中的等价物。

【问题讨论】:

    标签: java xml


    【解决方案1】:

    Commons Digester 非常适合这类问题。它允许您配置解析规则,当解析器遇到某些标签时,它会执行一些操作(例如,调用工厂方法来创建对象)。您不必编写任何解析代码,使开发快速且轻量级。

    以下是您可以使用的简单示例模式:

    <pattern value="myConfigFile/foos/foo">
        <factory-create-rule classname="FooFactory"/>
        <set-next-rule methodname="processFoo" paramtype="com.foo.Foo"/>
    </pattern>
    

    当解析器遇到“foo”标签时,它将在FooFactory 上调用createObject(Attributes),这将创建一个Foo 对象。然后解析器将在Digester 堆栈顶部的对象上调用processFoo(您通常会在开始解析之前将其压入堆栈)。因此,您可以实现 processFoo 将这些对象添加到集合中,或者如果您的文件太大,只需在每个对象到达时对其进行处理,然后将其丢弃。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我可能会使用它,但它看起来并没有得到积极维护。
      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2011-09-25
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      相关资源
      最近更新 更多