JAXP
JAXP(Java API for XML Processing,意為XML處理的Java API)是Java XML程序設計的應用程式接口之一,它提供解析和驗證XML文檔的能力。JAXP是在Java社區進程下開發的,包括JSR 5 (JAXP 1.0)和 JSR 63 (JAXP 1.1和1.2)兩個規範。
JAXP解析XML的三種基本接口為:
除了解析接口,JAXP還提供了XSLT接口用來對XML文檔進行數據和結構的轉換。
DOM接口
[編輯]DOM接口可能最容易理解。解析器解析整個XML文檔並構造出該文檔的一個完整的內存表示,使用類對文檔對象模型(DOM)級別2核心規範[1]中的概念進行建模。
DOM解析器被稱作DocumentBuilder
,因為它構建一個內存中的Document
表示。javax.xml.parsers.DocumentBuilder
是由javax.xml.parsers.DocumentBuilderFactory
創建的。DocumentBuilder
創建org.w3c.dom.Document
的實例,Document是一個包含XML文檔中的所有節點的樹。結構中的每一個樹節點實現org.w3c.dom.Node
接口。樹節點有許多不同類型的,表示XML文檔中不同的數據類型。最重要的節點類型有:
- 元素節點,具有許多屬性
- 文本節點,代表文檔元素開始和結束標籤之間的文字。
節點類型的完整列表,請參見org.w3c.dom
包中的Javadoc文檔。
SAX接口
[編輯]SAX解析器被稱作SAXParser
,SAXParser是由javax.xml.parsers.SAXParserFactory
創建的。與DOM解析器不同,SAX解析器並不創建XML文檔的內存表示,因此要更快使用更少的內存。而是,SAX解析器通過調用回調方法將XML文檔結構告知客戶端,也就是說,通過調用提供給解析器的org.xml.sax.helpers.DefaultHandler
實例上的方法。
DefaultHandler
類實現了ContentHandler
,ErrorHandler
,DTDHandler
以及EntityResolver
等接口。大多數客戶端甘心ContentHandler
接口中定義的方法,當SAX解析器在XML文檔中遇到元素時,相應的方法將被調用。接口中最重要的方法有:
startDocument()
和endDocument()
方法,當XML文檔的開始和結束時被調用。startElement()
和endElement()
方法,當一個文檔元素開始和結束時被調用。characters()
方法,調用處理XML文檔元素的開始標籤和結束標籤之間的文本數據。
客戶端提供一個DefaultHandler
的子類,實現這些方法,並在方法中對數據進行處理,可能會將數據存入數據庫,或寫出到流中。
在解析過程中,解析器可能需要訪問外部文檔。因此可能會使用XML Catalog將經常使用的XML文檔存儲在本地的緩存中。
SAX接口是在2000年5月發佈的Java 1.3中引入的。[2]
StAX接口
[編輯]StAX的設計介於DOM和SAX接口之間,在它的隱喻中,程序的入口點是一個代表文檔中一個位置的光標。應用程式可以按需向前移動光標 – 從解析器中「拉」出信息。這與基於事件的API(如SAX)不同,SAX將數據「推」給應用程式,要求應用程式維護事件間的狀態,如果應用需要知道在文檔中的位置信息。
XSLT接口
[編輯]XSLT(可擴展樣式錶轉換語言)允許將XML文檔轉換為數據其他形式。應用程式使用javax.xml.transform
包中的接口可以進行XSLT轉換。接口最初被稱為TrAX (Transformation API for XML),是由許多Java XSLT處理器的開發人員通過非正式協作開發的。
接口的主要特性包括:
- 工廠類
javax.xml.transform.TransformerFactory
可以使應用動態地選擇使用哪一個XSLT處理器。 TransformerFactory
上的方法用來創建javax.xml.transform.Templates
對象, 表示樣式表的編譯後的形式。這是一個線程安全的對象,可以重複使用,順序或並發,在多個源文檔上應用同一個樣式表(或用用一個源文檔,不同的參數)Templates
上的方法可以創建javax.xml.transform.Transformer
,表示樣式表的可執行形式。Transformer
不可以在線程間共享,雖然也是可重用的。Transformer
提供方法設置樣式表參數和序列化選項(例如,輸出是否縮進),以及一個實際運行轉換的方法。
JAXP定義了javax.xml.transform.Source
和javax.xml.transform.Result
兩個抽象接口來表示轉換的輸入和輸出。某種程度上,這是非常規使用Java接口,這是因為並不期待一個處理器會接受任何實現該接口的類,每一個處理器可以選擇支持那些Source
和Result
的處理。實際上所有JAXP處理器支持三種標準類型的Source
(DOMSource
,SAXSource
,StreamSource
)以及三種標準類型的Result
(DOMResult
,SAXResult
,StreamResult
)以及處理器自己的實現。
版本
[編輯]J2SE版本 | 其中的JAX版本 |
---|---|
1.4 | 1.1 |
1.5 | 1.3 |
1.6 | 1.4 |
JAXP 1.4.4於2010年9月3日發佈。JAXP 1.3已經於2008年2月12日產品終結。[3]
參見
[編輯]外部連結
[編輯]參考文獻
[編輯]- ^ Document Object Model(DOM) Level 2 Core Specification. [2011-04-01]. (原始內容存檔於2020-12-19).
- ^ Compare the Java 1.2.1 API index (頁面存檔備份,存於互聯網檔案館) with the 1.3 index (頁面存檔備份,存於互聯網檔案館). The Java Specification Request (JSR) 5, XML Parsing Specification, was finalised on 21 March, 2000 (頁面存檔備份,存於互聯網檔案館).
- ^ [1][永久失效連結]