天天看點

SAX解析與DOM解析比較

java庫提供了兩種XML解析器,一種是文檔對象模型,一種是用于XML的簡單API,前者将讀入的XML文檔轉換成樹結構,後者在讀入XML文檔時生成相應的事件。在現實使用當中,應該使用哪一種?

        一般情況下,如果要處理較大的文檔,用DOM形式時因生成樹結構将會消耗大量記憶體,但是在實際運用當中,如果關心元素之間的聯系時,因樹形結構提供了對它 們上下文的通路操作,文檔對象模型應該說是首選。如果隻是對文檔中個别元素感興趣,在文檔較大的時候,為了減少記憶體開銷,采用SAX解析器應該算是比較好 的一種選擇,它在運作時解析結點,不必看到所有的樹型結構,它在解析XML輸入的構件時就報告事件,但不會以任何方式存儲文檔,由事件處理器決定是否要建 立資料結構。要在這兩者之間作出選擇,就在于實際情況。但是如何劃分這兩者之間的取舍界線呢?

        對于經常提到的大文檔,多大算大?對個别元素感興趣,如果隻對個别元素感興趣,那麼在項目設計當中,我想一般也不會因為個别元素的原因而專一建個XML文 檔中,就說可能是對用處較多的大文檔偶爾對其中的個别元素感興趣而進行特别的程式設計編碼,對于在使用大文檔較多的地方,想必會考慮到個别元素的特别設 計,因為在此處的運用當中應該會留有對個别元素的特别通路?

    java庫提供的文檔對象模型解析器是建立在SAX解析器的基礎之上的,它在接受到SAX解析器事件時建立DOM樹,運用DOM的好處我想應該是:

  1.對上下文通路方向。2。對元素操作的友善性上。DOM模型較SAX的優勢我想也應該是在這一方面,沒有人願意在操作大文檔的時候采用SAX的煩鎖操作(相對于DOM而言)。

    面向對象的程式設計其一的目的就在于友善,在友善的同時不忘性能優化,有時候越是友善操作,性能就越低,友善的實作就目前看來好像是在拿性能開刀,再優化,那也是多了幾個調用過程。

    我應該用哪一個呢?曾經想在項目中根據自己的需求,利用SAX解析器編制适合自己的控件,但是在多人開發中顯得不那麼現實,早就聽人說,程式員“懶”是出了名的,哪個用着友善就用哪個,dom4j想必就是程式員從周公那借來的小飛車:).

大項目經驗的人士:你們好,請就這方面多多給些建議

繼續閱讀