当前位置:编程问答 > JAVA >

java学习笔记——JAXP

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,并根据其值设置工厂的实现类。
 
 示例使用编程设置系统属性
[java]
<pre class="java" name="code">//使用DOM解析工厂 
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 
//使用SAX解析工厂 
System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl"); 
 
示例使用命名设置系统属性
[plain]
java -D javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl DOMTest 

方式二:使用jaxp.properties属性文件
该文化在%JAVA_HOME%/jre/lib路径下
 
示例:
%JAVA_HOME%/jre/lib/jaxp.properties
[plain]
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 
[plain]
<pre class="plain" name="code">javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl 
方式三:jar包里META-INF/services下的文件
这是推荐方法,也是XML解析器最广泛采用的方式。
查看xercesImpl.jar/META-INF/services就可看到相关文件。
 
方式四:使用默认XML解析器
JAXP使用Xerces为默认解析器。 


摘自  Crystalbruce的专栏 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,