快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

JAXP跟DOM4J是什么关系?


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




返回类别: 教程
上一教程: Java语言编码规范(Java Code Conventions)
下一教程: abstract class && Interface 比较

您可以阅读与"JAXP跟DOM4J是什么关系?"相关的教程:
· Java线程入门??什么是线程
· 为什么Java中继续是有害的
· 初学Java注重什么?
· hibernate连接sqlserver2000问题的解决(父子关系同时保存时发生 one-to-many & many-to-one)
· Java程序编码规范!不仅仅是规范,还有为什么这样做的理由,不错哦!
    微笑服务 优质保证 索取样品