国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

編程經(jīng)驗系列-Java學(xué)習(xí)雜談(五)

時間:2008-10-06 17:02:00   來源:無憂考網(wǎng)     [字體: ]
1. Java關(guān)于XML的解析
  相信大家對XML都不陌生,含義是可擴展標(biāo)記語言。本身它也就是一個數(shù)據(jù)的載體以樹狀表現(xiàn)形式出現(xiàn)。后來慢慢的數(shù)據(jù)變成了信息,區(qū)別是信息可以包括可變的狀態(tài)從而針對程序硬編碼的做法變革為針對統(tǒng)一接口硬編碼而可變狀態(tài)作為信息進入了XML中存儲。這樣改變狀態(tài)實現(xiàn)擴展的工作是在XML中添加一段文本信息就可以了,代碼不需要改動也不需要重新編譯。這個靈活性是XML誕生時候誰也沒想到的。
  當(dāng)然,如果接口要能提取XML中配置的信息就需要程序能解析規(guī)范的XML文件,Java中當(dāng)然要提高包對這個行為進行有利支持。筆者打算講到的兩個包是 org.w3c.dom和javax.xml.parsers和。(大家可以瀏覽一下這些包中間的接口和類定義)
  Javax.xml.parsers包很簡單,沒有接口,兩個工廠配兩個解析器。顯然解析XML是有兩種方式的:DOM解析和SAX解析。本質(zhì)上并沒有誰好誰不好,只是實現(xiàn)的思想不一樣罷了。給一個XML文件的例子:
  <?xml version=“1.0” encoding=“UTF-8” >
  
  
  A Cat
  

  

  所謂DOM解析的思路是把整個樹狀圖存入內(nèi)存中,需要那個節(jié)點只需要在樹上搜索就可以讀到節(jié)點的屬性,內(nèi)容等,這樣的好處是所有節(jié)點皆在內(nèi)存可以反復(fù)搜索重復(fù)使用,缺點是需要消耗相應(yīng)的內(nèi)存空間。
  自然SAX解析的思路就是為了克服DOM的缺點,以事件觸發(fā)為基本思路,順序的搜索下來,碰到了Element之前觸發(fā)什么事件,碰到之后做什么動作。由于需要自己來寫觸發(fā)事件的處理方案,所以需要借助另外一個自定義的Handler,處于org.xml.sax.helpers包中。它的優(yōu)點當(dāng)然是不用整個包都讀入內(nèi)存,缺點也是只能順序搜索,走完一遍就得重來。
  大家很容易就能猜到,接觸到的J2ee框架用的是哪一種,顯然是DOM.因為類似Struts,Hibernate框架配置文件畢竟是很小的一部分配置信息,而且需要頻繁搜索來讀取,當(dāng)然會采用DOM方式(其實SAX內(nèi)部也是用DOM采用的結(jié)構(gòu)來存儲節(jié)點信息的),F(xiàn)在無論用什么框架,還真難發(fā)現(xiàn)使用 SAX來解析XML的技術(shù)了,如果哪位仁兄知道,請讓筆者也學(xué)習(xí)學(xué)習(xí)。
  既然解析方式有了,那么就需要有解析的存儲位置。不知道大家是否發(fā)現(xiàn)org.w3c.dom這個包是沒有實現(xiàn)類全部都是接口的。這里筆者想說一下Java 如何對XML解析是Jdk應(yīng)該考慮的事,是它的責(zé)任。而w3c組織是維護定義XML標(biāo)準(zhǔn)的組織,所以一個XML結(jié)構(gòu)是怎么樣的由w3c說了算,它不關(guān)心 Java如何去實現(xiàn),于是乎規(guī)定了所有XML存儲的結(jié)構(gòu)應(yīng)該遵循的規(guī)則,這就是org.w3c.dom里全部的接口目的所在。在筆者看來,簡單理解接口的概念就是實現(xiàn)者必須遵守的原則。
  整個XML對應(yīng)的結(jié)構(gòu)叫Document、子元素對應(yīng)的叫做Element、還有節(jié)點相關(guān)的Node、NodeList、Text、Entity、 CharacterData、CDATASection等接口,它們都可以在XML的語法中間找到相對應(yīng)的含義。由于這里不是講解XML基本語法,就不多介紹了。如果大家感興趣,筆者也可以專門寫一篇關(guān)于XML的語法規(guī)則帖與大家分享一下