關於xml解析

lqg1122發表於2012-09-10

這幾天對xml這特殊的語言做了下了解分析,作為代表的解析是DOM ( Document Object Model)和SAX(Simple API

for XML)。

DOM ==>>這個東西,wiki上說的歷史比較有趣---browser war,這裡就不談了。

DOM它的本質其實就是一個樹的遍歷,我們看下下面例子:

<class>
    <student id=1>
        <name>lee</name>
        <age>20</age>
    </student>
    <student id=2>
         <name>suse</name>
         <age>21</age>
    </student>
</class>

這簡單的xml可以這樣看:

                          class
              +-------------||--------------+
              |                             |
           student.1                      student.2
      +-----||------+                      +----||----+
      |             |                      |          |
      name          age                    name      age
      |             |                      |          |
     lee              20                  suse       21

當DOM處理xml的時候,通過解析器,把xml檔案構建成如上的樹,存放在記憶體,可以隨時對數進行讀寫,這樣的設計

在使用上很方便實現上比較簡單,但當xml檔案足夠的龐大時,這做法明顯有缺陷。所以,另外一種代表性的xml解析

就是SAX。

SAX====>>從最初只為java設計,到普及多種語言,可以說明這種解析是高效並節省的。它不像DOM那樣把整個xml

檔案構建成樹存放在記憶體,它是串流的解析。簡單來說,要多少取多少;官方點來說就是,讀到哪就觸發到哪。


這是wiki的說法:一個實現SAX的解析器(也就是“SAX Parser”)以一個串流解析器的型式作用,擁有事件驅動API。

由使用者定義回撥函式,解析時,若發生事件的話會被呼叫。


這個想法,和麵向切面程式設計的思想相似。這好處也明顯的減少的對記憶體的壓力,也由於邊讀邊觸發處理,所以速度也

會比DOM解析的快。

每種方法都會有優缺點,SAX的缺點是單向性,過了就回不了頭,像debug的時候,過了這個作用域就看不到引數的

資訊。所以在各種應用各種要求下,DOM和SAX會分別滿足各自需求。。。。


DOM的樹的遍歷在反覆的操作下始終是不太看好,而SAX的單向性不夠靈活。


對於xml的想法,

1.高度自定義的標籤

2.高度自定義的作用;資料繫結,sql操作。。。

3.高度自定義的語法;

在出色的解析器下,是可以發揮極大的作用。




相關文章