辰o(^o^)o的專欄[除非注釋原創,其它文章基本來源于網絡]
隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
數據加載中……
Java XML API 漫談
在IBM的developerWorks上有幾篇非常優秀的關于Java XML API的評測文章,它們是:
http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml
http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml
http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part2/index.shtml
http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part1/index.shtml
對這幾篇文章我想說的就是
“吐血推薦”
Java的XML API這幾篇文章該講的都講到了,我只想補充幾點:
一、Crimson和Xerces恩仇錄
Crimson來自于Sun捐贈給Apache的ProjectX項目,Xerces來自IBM捐贈給Apache的XML4J項目,結果Xerces勝出,成了Apache XML小組全力開發的XML API,而Crimon已經早就不做了,如今Xerces名滿天下,到處都是在用Xerces DOM和SAX解析器,只有Sun不服氣,非要在JDK1.4里面使用過時的Crimson,讓人感覺像是在賭氣一樣,真是讓人可憐又可氣!不過IBM發行JDK用的XML 解析器自然是Xerces。
由于JDK的Class Loader的優先級關系,當你采用JAXP編寫XML程序的時候,即使把Xerces包引入CLASSPATH,JDK還是會頑固的使用Crimson,這一點通過打開JVM的verbose參數可以觀察到。不過JDK也允許你采用其它的解析器,因此我們可以通過在JRE\lib\目錄下建一個jaxp.properties的文件,來替換解析器,jaxp.properties內容如下:
引用:
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
這樣就可以使用Xerces,當然你必須還是要把Xerces包放到CLASSPATH下。
二、JAXP的姍姍來遲
Sun在XML領域總是后知后覺,等到Sun重視XML的時候,XML的API早就滿天 飛了,尤其是IBM具有非常大的領先優勢。不過Sun是規范的制訂者,于是參考W3C的標準制訂了JAXP規范。JAXP不像Xerces和Crimon那樣,它只是一個spec,本身是不做任何事情的,它的作用就是提出一個統一的接口,讓其它的XML API都來遵循JAXP編程,那么用JAXP寫出來的程序,底層的API可以任意切換。
具體來說JAXP包括了幾個工廠類,這就是JDK1.4里面的javax.xml.parsers 包,用來尋找符合DOM標準的XML API實現類的位置;此外JAXP還包括一整套interface,這就是JDK1.4里面的org.w3c.dom那幾個包。工廠類負責加載DOM的實現類。那么加載的規則是什么呢?
我是通過閱讀JAXP的源代碼知道的,工廠類首先會根據java命令行傳入的參數進行尋找,然后在根據JRE\lib\jaxp.properties中定義的實現類尋找,最后什么都找不到的話,就用Crimson。注意Crimons是由Bootstrap Class Loader來load的,如果你不通過上面兩個方法來改變工廠的尋找順序,那么鐵定用Crimson了
三、 DOM解析器和DOM API
當你嚴格采用JAXP編程的時候,是遵循W3C的DOm標準的,那么在JAXP底層你實際上可以任意切換不同的DOM實現,例如Xerces,或者Crimon,再或者其它,切換方法就是配置jaxp.properties。因此JAXP就是一些標準接口而已。
而Xerces和Crimon也不單單是一個DOM實現那么簡單,他們本身實際上也包含SAX解析器和DOM解析器。所以一個JAXP程序下面有如下層次:
引用:
JAXP應用程序 -> JAXP接口 -> Xerces DOM實現 -> Xerces DOM/SAX 解析器
只要你用JAXP編程,那么你就可以切換到Crimson上來
引用:
JAXP應用程序 -> JAXP接口 -> Crimson DOM實現 -> Crimson DOM/SAX 解析器
另外你也可以這樣來做:
引用:
JAXP應用程序 -> JAXP接口 -> Crimson DOM實現 -> Xerces DOM/SAX 解析器
不過如果你的程序不安裝JAXP來寫,那么就沒有辦法切換不同的DOM實現了。
四、不是標準的dom4j和jdom
W3C的DOM標準API難用的讓人想撞墻,于是有一幫人開發Java專用的XML API目的是為了便于使用,這就是jdom的由來,開發到一半的時候,另一部分人又分了出來,他們有自己的想法,于是他們就去開發dom4j,形成了今天這樣兩個API,至于他們之間的性能,功能之比較看看上面我推薦的文章就知道了,jdom全面慘敗。
jdom 相當于上面的 JAXP接口 + Xerces DOM實現部分,它本身沒有解析器,它可以使用Xerces或者Crimson的解析器,就是這樣:
引用:
jdom應用程序 -> jdom API -> Xerces/Crimson解析器
dom4j 和jdom類似,不過他自己綁定了一個叫做Alfred2的解析器,功能不是很全,但是速度很快,當沒有其它的解析器的時候,dom4j將使用Alfred2解析器,如下:
引用:
dom4j應用程序 -> dom4j API -> Xerces/Crimson解析器
或者
引用:
dom4j應用程序 -> dom4j API -> Alfred2解析器
你在SF上下載的dom4j.jar是不含 Alfred2解析器的,而dom4j-full.jar包含了 Alfred2解析器,在這種情況下,實際上你什么也不需要,光是一個dom4j-full.jar就全部都包括了。
因此可以看出采用dom4j/jdom編寫的應用程序,已經不具備可移植性了。
五、小插曲
Sun是JAXP標準的制訂者,甚至很執著的在JDK1.4里面綁定Crimson DOM實現和解析器,然后可笑的是,Sun自己的JAXM RI竟然不是用JAXP寫出來的,而是dom4j,制訂標準讓大家遵守,自己卻監守自盜,這未免太說不過去了吧!
BTW: Hibernate也用的是dom4j來讀取XML配置文件,如今已經越來越多的程序紛紛采用dom4j,如果你不是那么在乎可移植性,我強烈建議你采用dom4j。
posted on 2005-03-05 22:10
辰
閱讀(120)
評論(0)
編輯
收藏
所屬分類:
Java_Xml
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
XML查詢語言
SAX之Java實現學習筆記
使用SAX處理XML文檔
應該使用SAX還是DOM?
JDOM使XML在Java中的操作比以往任何時候都更加容易。
從 XML 到 Java 代碼的數據綁定,系列之一(共四部分)
JAXP: Coding for Parser & Transformer Independence
用于XML的簡單API
文檔對象模型
用dom4j建立,修改XML文檔,并解決格式化輸出和中文問題
Powered by:
BlogJava
Copyright © 辰
導航
首頁
新隨筆
聯系
聚合
管理
公告
歡迎來到辰的blog
有事您Q我
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
文章分類
(153)
Edit Tools(11)
(rss)
Hibernate(4)
(rss)
J2ee(31)
(rss)
J2se(18)
(rss)
Java_Xml(18)
(rss)
JSF2.0(1)
(rss)
Jsp & Servlet(2)
(rss)
Life(5)
(rss)
log4j(1)
(rss)
Other(11)
(rss)
Peugeot 307(3)
(rss)
PHP4
(rss)
Reflection(1)
(rss)
Regular Expression(5)
(rss)
Struts(11)
(rss)
Test-Driven Development(5)
(rss)
Velocity(4)
(rss)
其他MVC框架
(rss)
數據庫相關(13)
(rss)
測試(6)
(rss)
設計模式(3)
(rss)
搜索
積分與排名
積分 - 52365
排名 - 955
最新評論
1.?re: Spring學習筆記
評論內容較長,點擊標題查看
--zuidaima
2.?re: Spring學習筆記[未登錄]
評論內容較長,點擊標題查看
--alex
3.?re: MyEclipse注冊機
ddddddddddddddddddddddddddddda
--licaichen
4.?re: 實例介紹Struts+Spring+Hibernate開發
頁面都亂套了,沒法看啊
--到此一游
5.?re: 人民幣大寫轉換,身份證識別等
達芬奇冊烏托邦我
--常矗
閱讀排行榜
1.?北京一夜 one night in beijing (1157)
2.?雨后,美麗的北京(673)
3.?美麗的九寨溝(632)
主站蜘蛛池模板:
美女视频黄免费亚洲
|
久9这里精品免费视频
|
女人张开腿给人桶免费视频
|
久久亚洲精品国产精品
|
伊人久久免费视频
|
亚洲av日韩综合一区在线观看
|
在线观看免费播放av片
|
亚洲成AV人片在线观看ww
|
国产精品免费视频播放器
|
亚洲综合精品伊人久久
|
97视频免费观看2区
|
暖暖在线日本免费中文
|
国产精品亚洲一区二区三区在线观看
|
免费毛片网站在线观看
|
羞羞网站在线免费观看
|
亚洲精品无码午夜福利中文字幕
|
久久久精品午夜免费不卡
|
91嫩草私人成人亚洲影院
|
日本高清在线免费
|
亚洲AV无码一区二区三区久久精品
|
免费人妻av无码专区
|
一级毛片a女人刺激视频免费
|
久久久久国产成人精品亚洲午夜
|
欧洲人成在线免费
|
色在线亚洲视频www
|
国产免费午夜a无码v视频
|
国产精品九九久久免费视频
|
久久精品国产亚洲AV麻豆~
|
成人黄色免费网址
|
黄网站在线播放视频免费观看
|
亚洲五月综合缴情在线观看
|
中文字幕视频免费
|
亚洲av无码一区二区三区人妖
|
亚洲综合图色40p
|
18禁止观看免费私人影院
|
国产AV无码专区亚洲AV琪琪
|
亚洲AV无码国产精品麻豆天美
|
免费做爰猛烈吃奶摸视频在线观看
|
高潮毛片无遮挡高清免费
|
77777_亚洲午夜久久多人
|
国产zzjjzzjj视频全免费
|