8. Transformer
XML DOM XSLT 8章 Transformer
8.1 Transformerこれまで、DOMツリーをXML文書として出力するために、Transformerオブジェクトを使用してきました。Transfomerは、JAXP付属のXSLTプロセッサーです。Transformerは、XMLのソースツリーを結果ツリーに変換するオブジェクトです。DOMに限らず、XSLT スタイルシートに基づいてXMLを変換することも可能です。 8.2 基本的な変換それでは、Transformerを使用したXMLの変換について、見ていきましょう。people.xmlを、sample.xslにしたがって変換します。 sample.xsl<?xml version="1.0"?> people.xml<?xml version="1.0"?> プログラムは以下のようになります。 1: import javax.xml.transform.TransformerFactory; まず、Transformerインスタンスを取得します。TransformerオブジェクトはTranformerFactoryのnewTransformerメソッドを使用して取得します。17行目で、TransfomerFactoryのnewInstance()メソッドを使用し、TransformerFactoryのインスタンスを取得しています。18行目でTransformerFactoryのnewTransformerメソッドを使用して、Transformerのインスタンスを取得しています。newTranformerの引数には、スタイルシートを指定します。スタイルシートとして、Sourceインタフェースを実装したオブジェクトインスタンスを指定します。ここでは、sample.xsl ファイルより生成したStreamSourceオブジェクトを引数に指定しています。 Sourceインタフェースについて、もう少し説明しましょう。Sourceインタフェースは、与えられたXMLをTransformerが処理するのに必要なメソッドを提供します。変換元となるXMLもSourceインタフェースを実装したオブジェクトに変換してから、Transformerに渡します。Sourceインタフェースを実装しているクラスには、DOMSource、SAXSource、StreamSourceがあります。 ソースがDOMツリー形式で与えられている場合は、DOMSourceインスタンスを作成します。DOMSourceのコンストラクタの引数にノードを指定すると、指定されたノードをルートノードとするソースツリーが形成されます。ファイルやInputStreamからソースツリーを作る場合は、StreamSourceを利用します。StreamSourceには、以下のようなコンストラクタがあります。
スタイルシートのSourceをStreamSource(InputStream)コンストラクタで取得した場合には注意が必要です。相対 URI
参照を解決できるようにしたい場合は、setSystemId メソッドを呼び出しベースとなるURIを設定する必要があります。 変換後の結果ツリーはResultにより管理されます。Result実装クラスの中で最もよく使用するのはStreamResultクラスでしょう。StreamResultクラスでは、以下のコンストラクタを持ちます。コンストラクタの引数で、出力先を指定しています。
例えば、StreamResult(File)コンストラクタを使用して、Resultを構築した場合、結果ツリーはXML文書として引数に指定されたファイルに出力されます。 もう一度、プログラムを確認してみましょう。20行目で、ソースファイルpeople.xmlを指定してSourceを構築しています。21行目では、出力先として標準出力を指定し、Resultを構築しています。最後にTranformerのtransformメソッドを使用して、XMLを変換しています。transformメソッドは、一つ目の引数にSource、2つ目の引数にResultを取ります。 このプログラムを実行すると、以下のように変換結果が標準出力に表示されます。 $ java TransformerSample <?xml version="1.0" encoding="UTF-8"?> A Person A Person (実習課題1)8.2で例に挙げたプログラムを修正しなさい。実行時の引数に、変換元となるXMLファイルを指定できるようにしなさい。また、XMLファイルをいろいろ作成し、実行結果を確認しなさい。 |
![]()
![]()
|