使用pull解析器在Java中一次读取一个节点的大型xml文件?

时间:2009-08-18 16:32:24

标签: java xml

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)