2009-08-25 84 views
1

我對SAX有一個相對普遍的問題。我明白它是如何工作的,並且基於我讀過的教程,我學習了通過讓大量數據成員像inNode那樣是布爾值,然後在每個事件處理器中檢查每個布爾值並相應地處理參數。SAX代碼效率

對我來說,這看起來效率很低,有沒有更高效的方法,還是隻是SAX的本質?

謝謝, 克里斯

+0

請嘗試http://code.google.com/p/jlibs/wiki/SAX2JavaBinding – 2010-01-23 07:00:09

回答

2

通常,您可以通過使用一堆簡單的標籤來保持狀態。

當您輸入節點時,您按下。

當你離開一個節點時,你會彈出。

有時這比許多布爾人更好。而是檢查堆棧以查看是否存在正確的上下文以保留要解析的數據。

+0

啊,這真的很有創意。我認爲這會使代碼更加清潔,儘管你可能仍然需要一堆if/else塊嗎?除非你真的有創意,並且有一些處理器體系結構存儲在一個散列表中,並將鍵作爲節點名稱...... – 2009-08-26 00:50:06

+0

很少你有一堆if/else塊。通常,您正在執行與當前上下文類似XPath的匹配,以查看是否要保留它。由於上下文是一個堆棧(Python中的列表),所以比較是微不足道的。在其他語言中,將堆棧與模板模式進行比較可能有點困難,但它比其他任何其他語言更正則表達式或XPath匹配。 – 2009-08-26 14:36:54

+0

它總是比一堆布爾人更好 - 實際上,我發現無法想象如果沒有一堆堆棧,就可以使用SAX。 – 2009-08-26 18:12:26

0

這是SAX如何工作。它專爲低內存使用率和更簡單的處理而設計。如果你的代碼變得太複雜了,你可能需要使用DOM模型。

+0

不夠公平,謝謝! – 2009-08-25 19:31:39

+0

另一種比DOM或SAX更高效的選擇是VTD-XML – 2011-01-25 05:36:26