2011-12-23 29 views
4

我有一個XML文件,它看起來像:基於某些條件,是否有任何sax庫支持提前退出?

<root> 
<application-key>ABC2349293493</application-key> 
... 
.. 
</root> 

XML文件是相當大的,而我只需要獲取應用程序鍵,看看這個請求應該是速率的限制。

我的服務器越來越糟,所以我需要一種方法來限制請求的速率,而不必讀取整個xml。

由於內存佔用,DOM不可能出現問題。

我對SAX很滿意,但使用xerces,您無法停止處理xml,因爲它是推式模型。到目前爲止我所知道的唯一方法就是拋出異常。

其他sax庫是否支持早期優雅退出?

回答

3

StAX (Streaming Api for XML) pull parser.選擇合適的實施方式也很重要:Best StAX Implementation

P.S.我仍然認爲SAX做事(拋出異常)的方式更簡單。

+1

像StAX這樣的解析器使得這非常自然。它也是IME,通常是一個更方便的編程模型。 – 2011-12-23 21:08:44

+0

你認爲拋出異常會讓它比stax慢嗎? – Blankman 2011-12-23 21:09:12

+0

@Blankman很難分辨哪一個更高性能。但我認爲這對於這個簡單的案例並不重要。 – 2011-12-23 21:11:29

2

異常確實是規範中唯一可用於退出解析過程的選項。如概述Java. Sax parser. How to manually break parsing?How to stop parsing xml document with SAX at any time?

如果你真的不想使用異常,那麼切換到pull解析器,但我認爲它不重要。

+0

雖然它會導致任何性能問題嗎?這是我所關心的。我要去測試它,但理論上的例外是正確的? – Blankman 2011-12-23 21:09:59

+1

@布蘭克曼 - 「理論上」相比較什麼?相比於執行單個機器指令,也許。相比於解析XML,令人懷疑。 – jtahlborn 2011-12-23 21:33:49

相關問題