学习笔记——JAXP

10 篇文章 0 订阅

Java API for XML(JAXP)

 

作用:解析XML文档的一套Java API,其为DOM和SAX两种解析机制提供了支持。

 

缺陷:使用繁琐,代码量大,可读性低。

解决方法:使用dom4j或JDOM解析器。

 

JAXP本身没有提供任何的XML解析支持,所以JAXP依赖与XML解析器,但其本身不与任何XML解析器耦合,因此可轻松在各种XML解析器直接切换而无须修改源代码,本质解释XML解析器与应用程序直接的抽象层。

 

JAXP由JDK直接提供,其包括:

javax.xml包及其子包;

org.w3c.dom包及其子包;

org.xml.sax包及其子包。

 

DOM:Document Object Model,W3C推荐使用。

特点:一次性将整份XML导入内存,转换成DOM树,因此转换速度慢;但因为常驻内存,所以重复访问效率高,并且可修改节点内容。

SAX:Simple API for XML,费W3C推荐标准,但确实XML行业规范。

特点:顺序解析,无需一次性导入,转换速度快;不保持以访问过的数据,所以重复访问效率低(需要重新解析XML),且无法修改节点内容。

 

解析器:目前最流行的是Apache组织的Xerces项目。 网址:http://xerces.apache.org/

 

xerces提供的包

xml-apis.jar:该包就是DOM和SAX标准的核心包,该包里几乎全是接口。

xercesImpl.jar:核心类库。

 

下面简单介绍下java.xml.parsers包

DocumentBuilderFactory:获取DOM解析器的工厂;

DocumentBuilder:用于从XML文档中获取DOM文档实例;

SAXParserFactory:获取SAX解析器的工厂;

SAXParser:包装一个SAX解析器。

 

DocumentBuilder、SAXParser都是抽象类,其实现由XML解析器完成。

 

JAXP如何选择的XML解析器工厂实现类:

方法一:通过系统属性来设置

DocumentBuilderFactory 和DocumentBuilder工厂的newInstance()能查看系统属性javax.xml.parsers.DocumentBuilderFactory和javax.xml.parsers.SAXParserFactory,并根据其值设置工厂的实现类。

 

 示例使用编程设置系统属性

//使用DOM解析工厂
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
//使用SAX解析工厂
System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");

 

示例使用命名设置系统属性

java -D javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl DOMTest


方式二:使用jaxp.properties属性文件

该文化在%JAVA_HOME%/jre/lib路径下

 

示例:

%JAVA_HOME%/jre/lib/jaxp.properties

javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl

方式三:jar包里META-INF/services下的文件

这是推荐方法,也是XML解析器最广泛采用的方式。

查看xercesImpl.jar/META-INF/services就可看到相关文件。

 

方式四:使用默认XML解析器

JAXP使用Xerces为默认解析器。

 

 





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值