我想将非常大的XML文件加载到DOM树(使用JAXP)中,执行一些修改并在生成的DOM上运行XPath查询。DOM节点上的Java,XPath
我们使用我们自己的DOM实现,它使用延迟加载来实现(即在开始时只有DOM的前两个级别从文件中加载,如果调用getChildNodes()/ etc,我们会返回到文件并加载更多级别)。这很慢,但是,我们能够加载更大的文件,特别是如果我们只使用文件的一部分。
我的问题:XPath在XML(afaik)上使用了不同的视图。我很好奇,如果默认的Oracle JDK实现现在将整个DOM文档转换为一些内部XPath文档(这将非常糟糕,因为它会急切地加载整个文档),或者如果XPath实现能够直接在我们的DOM树(即,如果XPath可以在已加载的元素中进行评估,则不会进一步加载)。
你是什么意思_very big_?如果您在运行时查看内存消耗,您的问题是否会得到解答? – jlordo 2013-02-21 00:15:54
为什么你认为XPath使用DOM以外的东西? FWIW,至少有一个我已经看到的错误表明它以常规形式使用DOM(该错误涉及遍历整个DOM,并且基于树中深层的上下文进行搜索)。 – parsifal 2013-02-21 20:05:53
规范没有提到DOM作为底层模型,并且Apache Xalan-J实现(这是Oracle JDK中使用的afaik)似乎使用某种DTM(http://xml.apache.org/xalan-j /dtm.html)。但是,我无法确定DOM是否完全在DTM中转换,或者只有评估XPathExpression所需的特定部分,或者DTM是否仅适用于DOM。 – 2013-02-21 20:33:05