java學習筆記——JAXP – JAVA編程語言程序開發技術文章

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的專欄 

發佈留言