posts - 38, comments - 9, trackbacks - 0, articles - 1

          JAXP and DOM4J

          Posted on 2005-04-11 12:36 大阿福 閱讀(207) 評論(0)  編輯  收藏

          JAXP是sun提出的一個規范,用于定義如何解析和轉換xml文檔的接口,目前版本已經達到1.3,根據解析轉換供應商無關性,解析器和轉換器可以在具體運行時進行多樣更換。這本身對于應用開發來說是一個福音。
          但是目前jaxp在國內的使用并不是想象中那樣的廣泛,這也是由于一定的市場原因存在(對于不同版本的jvm的支持的需求)。

          現在更多的應用采用dom4j和jdom,其操作接口更為簡便。

          個人以為,dom4j(不太了解jdom)并不是嚴格意義上的xml解析器,其底層也是采用符合jaxp規范的具體實現,并且dom4j的文檔中表明,可以和jaxp協同工作,采用jaxp已經config好的解析器和轉換器。

          在dom4j最新發布版本1.5.2中,由于許可證的問題,內部去除了解析器Aelfred2的實現,這下是否更應該依賴于底層的crimson.jar or xerces.jar,而二者是遵循jaxp規范的。

          具體知識還在研究中。

          對此與www.JavaGarden.net的一段討論:

          .--------------------------------------------------------------------.
          | Session Start: 2005年4月6日                                           |
          | Participants:                                                      |
          |    (sn)大阿福 (toafu@msn.com)                                         |
          |    .... 4月18日,愛因斯坦50周年祭日(ip)www.JavaGarden.net (turbochen@163.com) |
          .--------------------------------------------------------------------.
          [16:39:28] (sn)大阿福:
                     http://blog.csdn.net/toafu/archive/2005/04/06/338337.aspx
          [16:39:34] (sn)大阿福: 我理解的對嗎?
          [16:41:57] Turbo, A bea: good
          [16:42:52] (sn)大阿福:
                     可是我怎么找不到我直接使用dom4j的時候,它是怎樣于jaxp發生關聯的。當類路徑里面有二者的時候。
          [16:46:18] Turbo, A bea: jaxp不是有幾個factory嗎,就是從這入手的.
          [16:47:06] (sn)大阿福: 可是我沒有看到dom4j對這幾個factory有什么實現?
          [16:48:24] Turbo, A bea: 我記得在一個什么文章上看到過, 好像是從factory上入手, 傳入一個class之類的.
                     具體用什么方法還得去查查.
          [16:49:08] (sn)大阿福: 就是跟dom4j發生關聯的?
          [16:49:41] Turbo, A bea: 你應該還記得jdbc的驅動是怎么加載的, 跟那個原理類似.
          [16:50:37] (sn)大阿福: 按順序找幾個路徑下是否有可加載的類
          [16:51:23] Turbo, A bea: 不是, 是DriverManager.forName("classname");
                     類似這樣的方式.
          [16:51:32] (sn)大阿福: 對
          [16:53:52] (sn)大阿福:
                     是不是這樣理解,dom4j是不遵從jaxp規范的實現,同樣底層是那些遵從了jaxp規范的xml解析器,只是因為dom4
                     j提供了很簡便的接口而應用廣泛
          [16:55:49] Turbo, A bea: 我覺得是dom4j遵從了jaxp規范, 并加以擴展, 使API更容易使用.
                     我沒有實際用過dom4j, 但知道它比jaxp的dom api好用很多.
                     我之前開發全用是jaxp 的 dom api, 取一個元素代碼很啰嗦.
          [16:56:40] Turbo, A bea: 而jdom才是切頭切尾的沒遵從jaxp規范
          [16:56:52] Turbo, A bea: 不易移植.
          [16:57:14] (sn)大阿福:
                     好。我想知道的是,如果dom4j和jaxp的api都在classpath下時,如果能夠實現直接操作jaxp接口而保證底
                     層用dom4j實現的呢?
          [17:00:08] Turbo, A bea: How does dom4j relate to DOM?
                     DOM is a quite large language independent API. dom4j is a
                     simpler, lightweight API which is optimised for the Java
                     making extensive use of the Java 2 platform such as the
                     Java 2 collections.
                    
                     Though dom4j fully supports the DOM standard allowing both
                     APIs to be used easily together.
          [17:00:19] Turbo, A bea: 上面這段是dom4j的FAQ的內容
          [17:00:57] Turbo, A bea: dom4j fully supports the DOM standard
                     allowing both APIs to be used easily together.
          [17:01:07] Turbo, A bea: 上面這句最關鍵
          [17:01:52] (sn)大阿福: 不太明白什么意思
          [17:02:28] (sn)大阿福: both是指?
          [17:02:49] Turbo, A bea: 應該是指dom4j和dom
          [17:03:05] Turbo, A bea: together證明了這點
          [17:03:10] (sn)大阿福: 哦?
          [17:04:53] Turbo, A bea: 再看這一句: Dom4j works with any SAX parser via
                     JAXP.
          [17:05:37] (sn)大阿福: 呵呵,我就想知道它是如何work with的,或者咱們在代碼里寫的時候如何融合dom4j和jaxp
          [17:05:40] Turbo, A bea: 這就意味者,只要是符合jaxp規范的sax parser, 都可以作為dom4j的sax
                     parser使用.
          [17:07:00] (sn)大阿福: 你這句沒錯
          [17:08:04] (sn)大阿福: 那就是說dom4j和jaxp是并列的,只是dom4j不是規范而已,是嗎
          [17:08:58] Turbo, A bea: 我覺得jaxp是規范,而dom4j是規范的擴展.
          [17:09:35] (sn)大阿福: 而xerces等是規范的實現
          [17:09:55] Turbo, A bea: 是啊
          [17:10:21] (sn)大阿福: 是不是jaxp還未直接支持xpath,所以易用性不如dom4j
          [17:10:35] Turbo, A bea: 其實, jaxp最初的實現是由apache捐現的,
          [17:10:47] (sn)大阿福: 所以xml解析器就是apache的
          [17:10:59] Turbo, A bea: 還未完全實現xpath, 不知java5實現的如何了.
          [17:11:10] Turbo, A bea: 是啊
          [17:11:29] (sn)大阿福: 新的1.3支持java5,呵呵
          [17:11:36] (sn)大阿福: 好,多謝指教
          [17:13:40] Turbo, A bea:
                     http://www.pconline.com.cn/pcedu/empolder/wz/xml/0412/50976
                     2_1.html
          [17:13:52] Turbo, A bea: 這個文章可以一看,但不可全信.
          [17:14:04] (sn)大阿福: OK,3ks
          [17:17:50] Turbo, A bea:
                     http://www.54bk.com/more.asp?name=captain&id=1887
                     這個文章就可以看明白它們的關系了
          [17:19:36] (sn)大阿福: dom4j應用程序 -> dom4j API -> Xerces/Crimson解析器
                     dom4j應用程序 -> dom4j API -> Alfred2解析器
          [17:20:01] (sn)大阿福: dom4j默認都是用第一行的解析器吧
          [17:20:09] Turbo, A bea: apache的Xerces/Crimson解析器是核心,
          [17:20:15] (sn)大阿福: 嗯
          [17:20:24] Turbo, A bea: 其它類型的api都是用這些解析器.
          [17:20:34] (sn)大阿福: Alfred2已經在dom4j
          [17:20:44] (sn)大阿福: 1.5.2中remove掉了
          [17:20:56] Turbo, A bea: 是的
          [17:22:12] (sn)大阿福:
                     所以jaxp和dom4j之間并沒有規范和實現的關系,而dom4j使用實現了jaxp規范的apache的解析器來解析xm
                     l文檔。
          [17:22:24] (sn)大阿福: 感覺輪廓漸漸清晰了
          [17:22:36] Turbo, A bea: 而jaxp定義的接口,包括dom和sax接口.
          [17:22:54] Turbo, A bea: 然后jaxp也有自己的dom和sax實現.
          [17:23:16] (sn)大阿福: 那就是jaxp RI
          [17:24:07] (sn)大阿福: 是sun做的。sun定義了jaxp規范,完了又實現了自己的一套api,解析器同樣用apache的
          [17:24:45] (sn)大阿福: dom4j是未遵從jaxp規范實現了一套更易用的api,解析器也是用apache的
          [17:25:42] (sn)大阿福:
                     dom4j文檔中描述:當jaxp的jar在類路徑中是,dom4j使用的解析器會依據jaxp配置中的進行選擇。
          [17:27:09] Turbo, A bea: 所以'work with jaxp'的意思是指符合jaxp 規范的parser.
          [17:28:09] (sn)大阿福: 對,work with xml parsers obeying jaxp


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 四子王旗| 武平县| 长治县| 九龙坡区| 雅安市| 含山县| 邵武市| 长白| 崇义县| 田林县| 玛沁县| 白河县| 句容市| 万年县| 蓬溪县| 澄迈县| 永新县| 汶上县| 景德镇市| 湖口县| 军事| 巴东县| 扎鲁特旗| 温州市| 灵武市| 南澳县| 长子县| 华蓥市| 黄骅市| 临湘市| 湟中县| 上杭县| 汕头市| 酒泉市| 金湖县| 如皋市| 连城县| 桃源县| 襄樊市| 新蔡县| 罗山县|