Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用拉式解析器在Java中一次读取一个节点的大型xml文件?_Java_Xml - Fatal编程技术网

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

使用拉式解析器在Java中一次读取一个节点的大型xml文件?,java,xml,Java,Xml,我希望解析大型XML文件,并从Java一次读入一个完整的节点。这些文件太大,无法放在树上。如果可能的话,我想使用pull解析器,因为它似乎更容易编程。给定以下XML数据 在使用StAX解析器时,我不必检查每个事件,而是希望每次调用hasNext或类似的函数都返回一个包含记录节点上完整信息的对象。当使用Perl XML::LibXML::Reader时,我可以使用它的read方法来实现这一点,因此我正在寻找Java中的等效方法。对于此类问题非常有用。它允许您配置解析规则,当解析器遇到某些标记时,它

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

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

下面是一个可以使用的简单示例模式:

<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
对象。然后,解析器将对
摘要器
堆栈顶部的对象调用
processFoo
(通常在开始解析之前将其推到堆栈上)。因此,您可以实现
processFoo
将这些对象添加到集合中,或者如果文件太大,只需在每个对象到达时进行处理,然后将其扔掉。

试试看

我可能会使用它,但它看起来并没有得到有效维护。