2012-06-12 55 views
0

我試圖完成以下任務:DOM4J:SAX解析加載的文件

  1. 負荷的文檔(完成)
  2. 走線槽文檔深度優先,並使用從JDK一個DefaultHandler的做一些工作

我想這樣做的原因是我已經有我的處理程序,現在我正在使用它與一個SAX分析器。我現在想要在內存文檔中使用處理程序。

請注意,這在以下方面很有用:我必須多次使用處理程序。對於大型文檔,我想使用SAX,對於小型文檔,我想使用內部表示。

謝謝!

回答

1

做到這一點的最快捷方式(快速編碼)是寫一個你想用SAX解析成內部的字符串,然後使用該內部文件的部分基於該字符串StringReader,傳遞到SAX解析器使用您的處理程序。

您真正需要的是根據您的數據生成SAX事件並將這些事件提供給處理程序。您可以通過將數據獲取爲InputSourceReader的形式,然後在解析中使用這些數據(這是上述策略),或者您可以直接通過直接調用ContentHandler的方法來模擬SAX事件已經寫好。但是如果你的文檔非常複雜,那麼按照正確的順序調用它們併爲它們提供正確的數據來完成你所需要的操作可能會很痛苦。

如果Dom4J提供了一種基於文檔結構中的節點創建InputSource的方法,那將是最容易使用的,並且可能比首先將其寫入字符串更有效。

您可能更好考慮將執行實際工作的ContentHandler中的部分提取到單獨的類中,您可以使用ContentHandler和來自內部樹的新類。

+0

但是這會很慢,不是嗎? – Xaero182

+0

可能會很慢,具體取決於您要重新分析多少。但是鑑於你已經解析過了,你對重新分析部分的決定會有點低效。 –

+0

這是真的。我實際上可以添加幾個處理程序並行處理更多的東西。正如你所建議的那樣,我想我會提取做這項工作的ContentHandler部分。謝謝! – Xaero182