今回から何回かにわたって「javax.xml.transform パッケージ」内のクラスを見ていきます(一覧)。
javax.xml.transform パッケージ内には、XSL 変換 (XSLT : XML Stylesheet Language Transformation) を行うための API が定義されています*1。
ただしパッケージ名の「transform」は、この「XSL 変換」とともに、「オブジェクトモデルの変換」という意味も含まれているようです。 つまり、org.w3c.dom.Document を org.dom4j.Document に変換したり、XML ファイルとして書き出したりする汎用的な API を提供します。
最低限使用するインターフェース・クラス
まずは、変換を行うために最低限必要なインターフェース、クラスを見ていきましょう。
インターフェース・クラス | 役割 |
---|---|
TransformerFactory | Transformer オブジェクトを生成するファクトリクラスです。 |
Transformer | 変換を実行するクラスです。 |
Source | 入力となる XML 文書やスタイルシートを抽象化したインターフェースです。 |
Result | 出力となる XML 文書を抽象化したインターフェースです。 |
TransformerConfigurationException | Transformer オブジェクトの生成に失敗した際に投げられる例外です。 |
TransformerException | 変換の実行に失敗した際に投げられる例外です。 |

使用方法
以下で、各インターフェース、クラスの使用方法を見ていきましょう。 ただし今回は Source、Result オブジェクトは外部から与えられるものとします。 これらについては次回以降に。
「XSL 変換」と「オブジェクトモデルの変換」の違いは TransformerFactory オブジェクトから Transformer オブジェクトを取得する時のみで、変換の手順はほとんど同じです。
★XSL 変換★
XSL 変換の手順は以下のようになります:
- TransformerFactory オブジェクトを生成する
- Transformer オブジェクトを生成する
- 変換を実行する
Java コードは次のようになります:
public void transformByStylesheet(Source stylesheet, Source src, Result result) throws TransformerConfigurationException, TransformerException{ // 1. TransformerFactory オブジェクトを生成する TransformerFactory factory = TransformerFactory.newInstance(); // 2. Transformer オブジェクトを生成する Transformer t = factory.newTransformer(stylesheet); // 3. 変換を実行する t.transform(src, result); }
TransformerFactory オブジェクトから Transformer オブジェクトを生成する際に、スタイルシートを表す Source オブジェクトを引数にして newTransformer() メソッドを呼び出します。
★オブジェクトモデルの変換★
「オブジェクトモデルの変換」も手順は「XSL 変換」とほぼ同じなので、別立てで書く必要はあまりないかも知れませんが、まぁ一応。
違いは TransformerFactory オブジェクトから Transformer オブジェクトを生成する際に、引数のない newTransformer() メソッドを使用することだけです。 この変換は XML 文書としては何も変換しないので、恒等変換 (identity transformation) と呼ばれます。
Java コードは以下のようになります:
public void transformObjectModel(Source src, Result result) throws TransformerConfigurationException, TransformerException{ // 1. TransformerFactory オブジェクトを生成する TransformerFactory factory = TransformerFactory.newInstance(); // 2. Transformer オブジェクトを生成する Transformer t = factory.newTransformer(); // 3. 変換を実行する t.transform(src, result); }
また、以下のように書くことも出来ます:
public void transformObjectModel(Source src, Result result) throws TransformerConfigurationException, TransformerException{ Transformer t = TransformerFactory.newInstance().newTransformer(); t.transform(src, result); }