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

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

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

  

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