FORTUNE

          THE WAY TO THE MASTER...
          posts - 49, comments - 18, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          關(guān)于dom4j

          Posted on 2006-03-20 20:08 fortune 閱讀(710) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java技術(shù)
          今天就簡(jiǎn)單介紹一下處理XML文檔的常用東西,關(guān)于xml document的話,w3c的document結(jié)構(gòu)確實(shí)讓人感到頭痛,所以很多開(kāi)發(fā)者都轉(zhuǎn)向使用其他的document對(duì)象。其中dom4j是一個(gè)成功的開(kāi)源項(xiàng)目,從java的對(duì)象概念的角度出發(fā),按照通常的使用規(guī)范來(lái)處理xml文檔,可以說(shuō),在java社區(qū)里,dom4j使用的最為廣泛了,以下是dom4j的官方地址:http://www.dom4j.org/。如,眾所周知的o/r mapping工具h(yuǎn)ibernate就是使用dom4j來(lái)解釋xml文檔的(ejb3.0就是基于hibernate實(shí)現(xiàn)的),由此可見(jiàn),dom4j的使用廣泛之處。dom4j的一個(gè)最大的實(shí)用之處是支持XPath表達(dá)式的查詢(xún),這樣,我們可以在dom4j的Document結(jié)構(gòu)中使用這種簡(jiǎn)單的表達(dá)式就可以快速找到我們需要的某個(gè)元素了。

          ????? 下載dom4j開(kāi)發(fā)包:http://sourceforge.net/project/showfiles.php?group_id=16035。在前言我已說(shuō)過(guò),由于都采用了使用類(lèi)似的發(fā)布框架,所以對(duì)程序員來(lái)說(shuō)極為容易上手。下載完dom4j之后,在dom4j的docs/cookbook.html里有詳細(xì)的入門(mén)手冊(cè),而在src/samples里面則是一些樣例,src/test文件夾里面是JUnit的測(cè)試?yán)印_@些東西都已經(jīng)很詳細(xì)的介紹了怎樣進(jìn)行入門(mén)介紹。這里,我打算小結(jié)一下dom4j的Document結(jié)構(gòu):

          ????? 首先,要明白的是dom4j是基于面向接口的樣式來(lái)實(shí)現(xiàn)處理xml文檔的,這種方法在面向?qū)ο蟮念I(lǐng)域里特別常見(jiàn)。使用的常用接口都封裝在org.dom4j包里,而怎樣讀取xml文檔呢?則是使用一系列的api函數(shù),這些常用方法都封裝在org.dom4j.io。

          (1)從面向?qū)ο蟮慕嵌葋?lái)看,dom4j對(duì)XML的文檔結(jié)構(gòu)進(jìn)行了封裝,從一個(gè)文檔的角度來(lái)說(shuō)(我們不考慮內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)的話),可以簡(jiǎn)單的把一個(gè)XML文檔就當(dāng)做一個(gè)org.dom4j.Document:

          ???????? 我們現(xiàn)在使用dom4j的Document結(jié)構(gòu),而不是使用w3c的Document結(jié)構(gòu),讀取一個(gè)文件,在內(nèi)存中構(gòu)造一個(gè)Document結(jié)構(gòu):Document doc=new SAXReader().read(new File("...")); 就可以獲得一個(gè)Document結(jié)構(gòu)。注意,dom4j同時(shí)也對(duì)w3c的Document結(jié)構(gòu),SAX Event的支持,具體的使用可以參看docs/cookbook.html中的內(nèi)容。這里不一一介紹。

          (2)獲得一個(gè)dom4j的Document結(jié)構(gòu)之后,從面向?qū)ο蟮慕嵌龋覀冏匀欢坏南肫鸬氖荴ML中的element,dom4j根據(jù)這種想法對(duì)這些進(jìn)行了封裝org.dom4j.Element類(lèi)就是對(duì)這些進(jìn)行了封裝,從Document中獲得Element:

          ???????? 首先獲得一個(gè)root元素,Element root=doc.getRootElement();而其他的元素也可以根據(jù)這個(gè)root元素來(lái)獲得。

          (4)一個(gè)元素的屬性的話,則是Attribute,在Element類(lèi)中,有非常容易操作的方法添加于獲得Attribute,addAttritue();attribute()等函數(shù)原型都提供了操作。

          (5)dom4j同時(shí)也提供了在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)的構(gòu)造,不降低處理的靈活性。如:Node就是對(duì)一個(gè)xml文檔樹(shù)的節(jié)點(diǎn)的封裝,而B(niǎo)ranch則是對(duì)一個(gè)樹(shù)的分支的封裝,通過(guò)使用這些,可以靈活的按照樹(shù)的結(jié)構(gòu)來(lái)處理xml文檔。敏感的朋友可能會(huì)注意到,Document和Element都是Node與Branch的子類(lèi),這種不同功能的領(lǐng)域的封裝可以按照對(duì)象的處理與數(shù)據(jù)結(jié)構(gòu)的結(jié)合,靈活的處理xml文檔。

          ???????? 以上是一點(diǎn)簡(jiǎn)單的介紹入門(mén)dom4j的Document結(jié)構(gòu),詳細(xì)的請(qǐng)看docs/cookbook.html文件,里面太詳細(xì)了,:-)。

          主站蜘蛛池模板: 云龙县| 洪江市| 筠连县| 桃园县| 朔州市| 丹凤县| 文水县| 于都县| 永福县| 黄平县| 云龙县| 格尔木市| 五原县| 循化| 贵港市| 武定县| 重庆市| 仁怀市| 滨州市| 乌海市| 金平| 横山县| 电白县| 方山县| 天等县| 横峰县| 阿鲁科尔沁旗| 阿拉善左旗| 惠水县| 沧源| 孟村| 新泰市| 马关县| 宕昌县| 唐海县| 开鲁县| 塔河县| 大同市| 明溪县| 如皋市| 滨海县|