JavaTM 2 Platform
Standard Ed. 6

軟體套件 javax.xml.transform

此套件定義了用於處理轉換指令,以及執行從源到結果的轉換的一般 API。

請參見:
          描述

介面摘要
ErrorListener 要提供自定義錯誤處理,則需實作此介面並使用 setErrorListener 方法註冊一個帶有 Transformer 的實作的實例。
Result 實作此介面的物件包含建構轉換結果階層樹所需的資訊。
Source 實作此介面的物件包含充當源輸入(XML 源或轉換指令)所需的資訊
SourceLocator 此介面的主要目的是報告在 XML 源或轉換指令中發生錯誤的位置。
Templates 實作此介面的物件是處理後的轉換指令的運行時表示形式。
URIResolver 實作此介面的物件可由處理器進行調用,以將 document()、xsl:import 或 xsl:include 中使用的 URI 轉換為 Source 物件。
 

類別摘要
OutputKeys 提供可用於設置 Transformer 的輸出屬性或從 Transformer 或 Templates 物件檢索輸出屬性的字元串常數。
Transformer 此抽象類別的實例能夠將源階層樹轉換為結果階層樹。
TransformerFactory TransformerFactory 實例可用於創建 TransformerTemplates 物件。
 

異常摘要
TransformerConfigurationException 指示嚴重的配置錯誤。
TransformerException 此類別指定了轉換過程中發生的異常條件。
 

錯誤摘要
TransformerFactoryConfigurationError 當通過 Transformer Factories 進行的配置存在問題時拋出此異常。
 

軟體套件 javax.xml.transform 的描述

此套件定義了用於處理轉換指令,以及執行從源到結果的轉換的一般 API。這些介面不依賴於 SAX 或 DOM 標準,且盡可能少地進行有關轉換的源和結果的細節的假定。它通過定義 SourceResult 介面來實作這一點。

為了定義具體的使用者類別,API 定義了根級介面規範。這些介面可以在 javax.xml.transform.saxjavax.xml.transform.domjavax.xml.transform.stream 中找到。

創建物件

API 從靜態函數 TransformerFactory.newInstance() 創建具體 TransformerFactory 物件。

輸入和輸出規範

此 API 定義了兩個介面物件,它們稱為 SourceResult。為將 Source 和 Result 物件傳遞到介面,必須使用具體類別。為每個物件定義了三個具體表示形式:StreamSourceStreamResultSAXSourceSAXResultDOMSourceDOMResult。這些物件中的每一個物件均定義了一個 FEATURE 字元串,可以將它傳遞到 TransformerFactory.getFeature(java.lang.String) 中以查看是否支持給定型別的 Source 或 Result 物件。例如,要測試是否支持 DOMSource 和 StreamResult,可以使用以下測試。


TransformerFactory tfactory = TransformerFactory.newInstance();
if (tfactory.getFeature(DOMSource.FEATURE) && tfactory.getFeature(StreamResult.FEATURE)) {
...
}

Qualified Name 表示形式

當處理 XML 物件時,Namespaces 存在某些問題。XML 中出現的 Qualified Names 標記為帶前綴的名稱。但前綴本身不保持標識。而由它們在上下文中所映射到的 URI 來保持標識。因此,當在 Java 程序中傳遞像 "xyz:foo" 這樣的 Qualified Name 時,必須提供將 "xyz" 映射到名稱空間的方式。

一種解決方案是創建一個保持名稱空間以及前綴和本地名稱的 "QName" 物件,但這不總是最佳解決方案,例如,當要將唯一字元串用作字典中的鍵時就是如此。沒有字元串表示形式還將導致難以在 XML 文檔的上下文之外指定名稱空間的標識。

為了將名稱空間的值傳遞給轉換,例如當設置 Transformer 上的屬性或參數時,此規範定義 String "qname" 物件參數作為兩部分字元串來傳遞,即用花括號({})括起來的名稱空間 URI,後跟本地名稱。如果 qname 有 null URI,則 String 物件只包含本地名稱。應用程序可以通過測試安全地檢查非 null URI,以查看名稱的首字元是否為 '{' 字元。

例如,如果 URI 和本地名稱是從通過 <xyz:foo xmlns:xyz="http://xyz.foo.com/yada/baz.html"/> 定義的元素獲取的,則 Qualified Name 將為 "{http://xyz.foo.com/yada/baz.html}foo"。注意不使用前綴。

結果階層樹序列化

結果階層樹到串流的序列化可以通過 Transformer.setOutputProperties(java.util.Properties)Transformer.setOutputProperty(java.lang.String, java.lang.String) 方法來控制。這些屬性只應用於串流結果,當結果為 DOM 階層樹或 SAX 事件串流時,它們無效。

可以從 OutputKeys 類別參考比對 XSLT specification for xsl:output attributes 的字元串。也可以指定其他字元串。如果轉換器不識別輸出鍵,則拋出 IllegalArgumentException,除非鍵名稱為 namespace qualified。雖然某些實作可能會忽略名稱空間限定的輸出鍵名稱,但它們總是允許的。

如果只需從源到結果的簡單標識轉換,則 TransformerFactory 提供一個不帶參數的 TransformerFactory.newTransformer() 方法。此方法創建一個將源有效複製到結果的 Transformer。此方法可用於從 SAX 事件創建 DOM,或從 DOM 或 SAX 事件創建 XML。

異常和錯誤報告

轉換 API 拋出三種型別的特殊異常。


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only