今回は、Document オブジェクトをファイルなどに出力する際に、そのフォーマットを指定する org.dom4j.OutputFormat(以下、 OutputFormat)について見ていきます(一覧)。 OutputFormat は概ね org.dom4j.XMLWriter(以下、XMLWriter)と共に用います。
OutputFormat の使い方
OuputFormat を使う手順は
- OutputFormat オブジェクトを生成する
- そのOutputFormat オブジェクトを引数にして XMLWriter のインスタンス生成する
- XMLWriter を用いて Document オブジェクトを出力する
です。 これを踏まえて、サンプル・コードを見てみましょう:
import java.io.*; import org.dom4j.Document; import org.dom4j.io.*; public class OutputFormatSample { public static void write(Document doc, String filename)throws IOException{ // 1. OutputFormat のインスタンスを生成 OutputFormat myFormat = new OutputFormat("\t", true, "SHIFT_JIS"); XMLWriter xw = null; try{ // 2. OutputFormat を引数にして XMLWriter のインスタンスを生成 xw = new XMLWriter(new FileWriter(filename), myFormat); // 3. Document を書き出す xw.write(doc); xw.flush(); }finally{ if(xw != null)writer.close(); } } }
OutputFormat を引数にとる XMLWriter のコンストラクタは3つあります:
XMLWriter(OutputFormat) XMLWriter(java.io.OutputStream, OutputFormat) XMLWriter(java.io.Writer, OutputFormat)
OutputFormat のコンストラクタ
OutputFormat のコンストラクタは次の4つです:
public OutputFormat() public OutputFormat(String indent) public OutputFormat(String indent, boolean newlines) public OutputFormat(String indent, boolean newlines, String encoding)
引数の役割は次の通り。 省略された場合のデフォルト値は、次節の「OutputFormat のプロパティ」の欄参照。
引数 | 識別子 | 型 | 説明 |
---|---|---|---|
第0引数 | indent | String | 行頭の字下げに用いる文字列を指定します。 |
第1引数 | newlines | boolean | レイアウトのために新しい行を付加するかどうかを指定します。 |
第2引数 | encoding | String | 出力のエンコーディングを指定します。 |
OutputFormat のプロパティ
OutputFormat で設定できるプロパティを見ていきましょう。
boolean 型のプロパティ
値の取得・設定用のメソッドは Java Beans の boolean 値プロパティに対する Accessor メソッドに対する命名規則と同じです。 すなわち、"someProp" というプロパティに対して
- getter メソッド → isSomeProp()
- setter メソッド → setSomeProp(boolean)
となります。
名前 | デフォルト値 | 説明 |
---|---|---|
expandEmptyElements | false | 空要素を展開するかどうか。 |
newLineAfterDeclaration | true | XML文書宣言の後に空白行を入れるかどうか。 |
newlines | false | レイアウトのために新しい行を付加するかどうか。 |
omitEncoding | false | エンコーディング宣言を省略するかどうか。 |
padText | false | 要素とテキストが並んでいる場合にスペースを1つ挿入するかどうか。 |
suppressDeclaration | false | XML 文書宣言を省略するかどうか。 |
trimText | false | テキストの空白文字を削るかどうか |
xHTML | false | XHTMLかどうか。 |
boolean 以外の型のプロパティ
boolean 型でないプロパティに対する Accessor メソッドは、"someProp" というプロパティに対して
- getter メソッド → getSomeProp()
- setter メソッド → setSomeProp(..)
となります。
名前 | 型 | デフォルト値 | 説明 |
---|---|---|---|
AttributeQuoteCharacter | char | " | 属性の値を囲む文字。 "、'以外をセットしようとすると例外を投げる。 |
encoding | String | UTF-8 | 出力のエンコーディング。 |
indent | String | null | 字下げに用いる文字列。 |
lineSeparator | String | \n | 改行文字。 |
newLineAfterNTags | int | 0 | isNewLine が false のときいくつの要素ごとに改行するか。 |
また、indent の setter メソッドとして以下のものがあります:
- setIndent(boolean):インデントするかどうかを設定する
- setIndetSize(int):インデントの際に用いる文字列を、引数で指定される数の空白に設定する
既存のフォーマット
OutputFormat には、2つのフォーマット PrettyPrint と CompactFormat が予め用意されています。 これらのインスタンスは OutputFormat の static メソッド、OutputFormat#createPrettyPrint() もしくは OutputFormat#createCompactFormat() によって取得できます。
使い方は普通の OutputFormat と同じです。 また、このインスタンスに対してエンコーディングやその他のプロパティを変更したりもできます。 それぞれのプロパティは次の表の通り。
プロパティ名 | PrettyPrint | CompactFormat | OutputFormatのデフォルト値 |
---|---|---|---|
newlines | true | false | false |
trimText | true | true | false |
indent | 2 whitespaces | null | null |
これ以外のプロパティは OutputFormat のデフォルト値と同じです。