編程經(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ī)則帖與大家分享一下
相信大家對(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ī)則帖與大家分享一下
- 2009年9月全國(guó)計(jì)算機(jī)四級(jí)數(shù)據(jù)庫(kù)工程師考試真題及答案
- 2009年3月全國(guó)計(jì)算機(jī)四級(jí)數(shù)據(jù)庫(kù)工程師考試真題及答案
- 2008年9月全國(guó)計(jì)算機(jī)四級(jí)數(shù)據(jù)庫(kù)工程師考試真題及答案
- 2008年4月全國(guó)計(jì)算機(jī)四級(jí)數(shù)據(jù)庫(kù)工程師考試真題及答案
- 2011年3月全國(guó)計(jì)算機(jī)二級(jí)Java考試真題及答案
- 2010年9月全國(guó)計(jì)算機(jī)二級(jí)Java考試真題及答案
- 查看計(jì)算機(jī)等級(jí)考試全部真題>>
- 2024年9月上海計(jì)算機(jī)一級(jí)成績(jī)查詢時(shí)間及查分入口
- 2024年9月全國(guó)計(jì)算機(jī)一級(jí)成績(jī)查詢時(shí)間及查分入口
- 2024年9月全國(guó)計(jì)算機(jī)一級(jí)考試成績(jī)查詢?nèi)肟冢ㄒ验_(kāi)
- 2025年3月全國(guó)計(jì)算機(jī)二級(jí)成績(jī)查詢時(shí)間及成績(jī)查詢
- 2024年9月江蘇計(jì)算機(jī)一級(jí)成績(jī)查詢時(shí)間及查分入口
- 2024年9月浙江省全國(guó)計(jì)算機(jī)等級(jí)考試(NCRE)
- 2024年9月浙江計(jì)算機(jī)二級(jí)考試準(zhǔn)考證打印入口(9
- 2024年9月江蘇計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及查分