JAXPJava 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類實現了ContentHandlerErrorHandlerDTDHandler以及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.Sourcejavax.xml.transform.Result兩個抽象接口來表示轉換的輸入和輸出。某種程度上,這是非常規使用Java接口,這是因為並不期待一個處理器會接受任何實現該接口的類,每一個處理器可以選擇支持那些SourceResult的處理。實際上所有JAXP處理器支持三種標準類型的SourceDOMSourceSAXSourceStreamSource)以及三種標準類型的ResultDOMResultSAXResultStreamResult)以及處理器自己的實現。

版本

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]

參見

外部連結

參考文獻

  1. ^ Document Object Model(DOM) Level 2 Core Specification. [2011-04-01]. (原始內容存檔於2020-12-19). 
  2. ^ 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頁面存檔備份,存於互聯網檔案館).
  3. ^ [1][永久失效連結]