关于JDK若干重要XML处理组件的分析

关于JDK若干重要XML处理组件的分析

Java定义了相关包路径用于处理XML文档的一般接口规范(注意:这里是规范,也就是xml操作接口,它不是实现类),比如:

  • javax.xml.parser, 用于采用DOM或者SAX解析xml文档,其中DocumentBuilderFactorySAXParserFactory分别是DOMSAX各自的JAXP工厂调用类
  • javax.xml.stream, 用于采用STAX解析xml文档,其中XMLInputFactoryJAXP工厂调用类
  • javax.xml.transform, 用于XSLTxml文档进行转换,其中TransformerFactoryJAXP工厂调用类
  • javax.xml.validation, 用于Schema校验xml文档,其中SchemaFactoryJAXP工厂调用类
  • javax.xml.xpath, 用于XPath访问xml文档,其中XPathFactoryJAXP工厂调用类

那么,既然这些都是接口规范,那具体的实现在哪里呢?

1. JDK本身全部有一套实现,它们都被打包在rt.jar文件中,比如:

DocumentBuilderFactory的实现类是

com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

SAXParserFactory的实现类是

com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl

SchemaFactory的实现类是

com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory

XPathFactory的实现类是

com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl

TransformerFactory的实现类是

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

XMLInputFactory的实现类是

com.sun.xml.internal.stream.XMLInputFactoryImpl

由于这些已经都是JDK本身提供,因此它和第三方代码没有耦合性,所以它们最主要的使用场景是在服务器环境下,比如Tomcat服务器,为了与其中的WebApp更好的隔离,Tomcat服务器自身用到的xml解析和保存都是通过JDK本身所提供的组件。

说是JDK的自身实现,但其实它只是把Apache的Xerces项目抄过来,改了包路径而已。

2. 来自于第三方提供的实现。这些实现往往有着更好的性能或提供更多的特性支持,所以在一些用户开发的应用中使用更广泛,这些需要引入第三方包。

  • 比如ApacheXerces.jar项目中,

DocumentBuilderFactory的实现类是

org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

SAXParserFactory的实现类是

org.apache.xerces.jaxp.SAXParserFactoryImpl

SchemaFactory的实现类是

org.apache.xerces.jaxp.validation.XMLSchemaFactory

  • 比如SourceforgeSaxon.jar项目中,

TransformerFactory的实现类是

net.sf.saxon.TransformerFactoryImpl

  • 比如SourceforgeSaxon9-dom.jar项目中,

DocumentBuilderFactory的实现类是

net.sf.saxon.dom.DocumentBuilderFactoryImpl

3. 以上方式都是基于w3c中的标准DOM结构的解析方式。此外,还有一些第三方自定义的DOM结构及解析。

比如DOM4jJDOM,当然它们也能在自己的DOM结构和w3cDOM结构之间进行来回转换,以及对XML文档进行解析和保存,但它们本身并不是xml的完整解析器,因此仍需要依赖JDKxml解析器或者Apache-Xerces

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值