我想將非常大的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