倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

org.w3c.dom.Document を出力する

org.w3c.dom.Document オブジェクトを標準出力やファイルに出力するのに困ったことはありませんか? javax.xml.transform パッケージ内のクラスを使うと、ある程度簡単に Document オブジェクトを外部へ書き出すことが出来ます。

java.io.Writer へ書き出す

    public void outputDocumentToWriter(Document doc, Writer writer)
            throws TransformerException{

        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
        writer.flush();
    }

Transformer オブジェクトはインスタンス・フィールドなどとして保持しておく方が良いでしょう。 java.io.OutputStream へ書き出すメソッドも同様に書くことが出来ます。

リソースの解放はオブジェクトを生成した者が行う」ことにして、ここでは Writer オブジェクトの close() メソッドは呼び出していません。

ファイルへ書き出す


上記の「Writer へ書き出すメソッド」を用いれば、ファイルへ書き出すメソッドも書けます。 「リソースの解放」処理のために少々長くなってしまいますが。

    public void outputDocumentToFile(Document doc, String filename)
            throws IOException, TransformerException{
        
        Writer writer = null;
        try{
            writer = new FileWriter("output.xml");
            output(doc, writer);
            
        }finally{
            if(writer != null)writer.close();
        }
    }

リソースの解放はオブジェクトを生成した者が行う」ってことで、FileWriter オブジェクトを生成しているこのメソッド内で close() メソッドを呼び出しています。

標準出力へ書き出す


標準出力 System.out は「リソースの解放」をする必要がないので非常に簡単。

    public void outputDocumentToConsole(Document doc)
            throws TransformerException{
        
        output(doc, new OutputStreamWriter(System.out));
    }