自己打造SAX和DOM Parser

2021-09-08 15:17:08 字數 706 閱讀 2576

唉,這也是迫於無奈。當初看exodus的**的時候,還嘲笑他為什麼要自己去做那麼多xml解析的工作。現在才發現,還真的不得不自己來做。

xmpp的xml stream的形式就是一篇xml document分節發過來。所以理想狀況是這邊接收到一點xml就push到乙個sax parser中,然後得到sax event把累積的xml交給乙個dom parser解析出各個xml stanza。這裡乙個問題是沒有這樣的sax parser允許你收一點那邊做一點的。一般是會讀到了eof就罷工了的。而且從sax event中你也很難得到你要的xml stanza起始位置和終結位置從而取出xml交給dom parser。結果往往是要自己從sax event中跳過dom parser自己來完成dom的組裝過程。

我現在的做法就是從sax parser中剝離出tokenizer部分,然後自己來做sax解析,並且把不能解析的部分留給下一次,與下次push進來的xml一起做解析。然後自己根據tokenizer取出的token的資訊來拼裝簡版的dom(只有element和text,但是對xmpp已經夠用了,不夠再加)。最後的形式就是這邊提供乙個push方法,以及五個事件onstreambegin, onstreamend, onstanza, onstreamerror, onparsererror。

一開始的時候嘗試過完全自己來寫,發現那些**太醜了,還是用別人寫好了的比較好。無論如何,總算避免了完全手工的字串比對,比exodus那一套是強得多了。

SAX解析及SAX和DOM總結

dom解析器是將xml文件解析成樹狀模型並放入記憶體來完成解析工作的,而後對文件的操作都是在這個樹狀模型上完成的。這樣做的好處是結構清楚,操作方便。缺點極其耗費系統資源。不適用於解析超大型的xml檔案。sax解析器是通讀整個文件,根據文件內容產生事件,而把對這些事件的處理交由事件處理器處理。sax不...

自己動手打造Apache和Mysql綠色免安裝版

自己動手打造apache和mysql綠色免安裝版 我自己用了很久了,雖然很簡單,但相信許多人還不知道,就寫出來和大家共享 重裝完系統後 1.執行cmd進入命令列 2.進入apache所在的目錄下的bin目錄,如 d apache bin 執行 只要這一步apache服務就安裝好了 3.進入mysql...

如何用github和typora打造自己的雲筆記

從2016年冬季開始,我就有了看書會記些筆記的習慣,在比對了各個軟體之後,選定了有道雲筆記。主要看中了 1.免費 2.跨多個平台 手機 mac windows 3.可以用markdown寫。所以漸漸地,我也有了把筆記上傳github的想法。可是彼時github私有倉庫是收費的,而我又不想私密的筆記公...