今回は javax.xml.transform.Source インターフェースとその実装クラスを見ていきます。
Source インターフェース自体にはあまりメソッドは定義されていません。 これは入力となる XML 文書をオブジェクト化して Transformer オブジェクトに渡すためのインターフェースと思いましょう。
Source インターフェースを実装したクラスには、以下のようなものがあります*1:
- javax.xml.transform.stream.StreamSource
- javax.xml.transform.sax.SAXSource
- javax.xml.transform.stax.StAXSource
- javax.xml.transform.dom.DOMSource
- org.jdom.transform.JDOMSource
- org.dom4j.io.DocumentSource
それぞれ簡単に使い方を見ていきましょう。
★javax.xml.transform.stream.StreamSource★
StreamSource はファイルや java.io.Reader から XML 文書を読み込む際に使用します。
Source src = new StreamSource("sample.xml");
コンストラクタに指定できる型には以下のようなものがあります:
★javax.xml.transform.sax.SAXSource★
SAXSource は org.xml.sax パッケージに定義されている InputSource クラスを入力として用いたいときに使用します。
InputSource input = new InputSource("sample.xml"); Source src = new SAXSource(input);
InputSource オブジェクト自体は java.io.InputStream や java.io.Reader から生成することがほとんどですが、この場合 StreamSource クラスを用いても同様のことが出来るので、あまり SAXSource クラスを使うことはないかと思います*3。
逆に、Source オブジェクトを InputSource オブジェクトに変換したい場合は、SAXSource クラスの static メソッド SAXSource#sourceToInputSource() を使います:
Source src = ...;
InputSource input = SAXSource.sourceToInputSource(src);
★javax.xml.transform.stax.StAXSource★
StAXSource は XML イベント(の列)を入力にしたい場合に使用します。
XMLStreamReader reader = ...; Source src = new StAXSource(reader);
コンストラクタとして使用できるクラスは以下の2つ:
★javax.xml.transform.dom.DOMSource★
使用方法は簡単で、DOM の Document オブジェクト*4をコンストラクタに渡すだけです。 サンプル・コード(にもなってないけど)だけ載せておきます。
Document doc = ...; Source src = new DOMSource(doc);
★org.jdom.transform.JDOMSource★
DOMSource とほとんど同じです:
import org.jdom.Document; import org.jdom.transform.JDOMSource; Document doc = ...; Source src = new JDOMSource(doc);
★org.dom4j.io.DocumentSource★
DOMSource, JDOMSource とほとんど同じです:
import org.dom4j.Document; import org.dom4j.io.DocumentSource; Document doc = ...; Source src = new DocumentSource(doc);