DOM: XMLデータを作成する(3) エンコーディングを指定する

2007年06月17日(日)更新


■生成するXMLファイルのエンコーディング(encoding)指定

たけち: 前回は、ルート要素だけの簡単なXMLファイルを作成したね。

さらら: えぇ。manyosyuノードだけのXMLファイルだったわね。

たけち: うん。ここで、どんな内容だったかをもう一度確認してみよう。次のようだったね。

(前回)生成したXMLファイル例 sample22.xml
<?xml version="1.0" encoding="UTF-8"?>
<manyosyu/>

たけち: 1行目の
encoding="UTF-8"
を見てごらん。

さらら: えっ〜と、、、確か、「このXMLファイルの文字コードがUTF-8です。」って意味だったわね。

たけち: そうそう。

さらら: あっ。そういえば、前回のプログラムでは、そんなこと何も指定してなかったような気がするけど・・・

たけち: うん。何も指定しないとUTF-8で生成されるんだよ。

さらら: そうなの。


■XMLファイルのエンコーディング(encoding)指定方法

たけち: XMLファイルのエンコーディング(encoding)指定は、TransformerクラスのsetOutputPropertyメソッドで指定するんだ。

さらら: そっ、そう・・・・・ (^ ^;

たけち: あっ、すごく簡単だから、ねっ。次に指定方法を書いておくね。

TransformerクラスのsetOutputPropertyメソッド

void

setOutputProperty(String name,String value)

・機能: このノードが子ノードを持っているかどうかを判断します。
・パラメタ: 
     String name : 出力プロパティの名前
        エンコーディング(encoding)の場合、OutputKeys.ENCODING を指定します
     String value : 出力プロパティの値
        エンコーディング(encoding)の場合、"UTF-8"や"Shift_JIS" を指定します
・戻り値: ありません

(注) OutputKeys.ENCODINGは"encoding"という文字列として定義されています。

さらら: で、結局はどう書けばいいの?

たけち: encoding="Shift_JIS"として出力したいときには、次のように書けばいいんだよ。

setOutputProperty(OutputKeys.ENCODING,"Shift_JIS")

さらら: これだけでいいのね。

たけち: そうだよ。。。。(^ ^;


■DOMサンプルプログラム encoding="Shift_JIS"を指定

たけち: じゃ、今回のDOMサンプルプログラム(23)のソースコードを載せておくね。

さらら: はい。

DOMサンプルプログラム(23) DOMSample23.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package dom.study.sample_2;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DOMSample23 {

    public static void main(String[] args) {	
		
      try {
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docbuilder = dbfactory.newDocumentBuilder(); // DocumentBuilderインスタンス
        Document document = docbuilder.newDocument();          // Documentの生成

        /*
         * root要素として manyosyu要素を生成
         */
         Element root = document.createElement("manyosyu");    // manyosyuノード作成
         document.appendChild(root);                // ノードをDocumentに追加
			
         /*
          * DOMオブジェクトを文字列として出力
          */ 
         TransformerFactory tfactory = TransformerFactory.newInstance(); 
         Transformer transformer = tfactory.newTransformer(); 
         
         /*
          * encoding="Shift_JIS"を指定
          */
         transformer.setOutputProperty(OutputKeys.ENCODING, "Shift_JIS");
         
         File outfile = new File("sample23.xml");
         transformer.transform(new DOMSource(document), new StreamResult(outfile)); 

      } catch (ParserConfigurationException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
      } catch (TransformerException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
      }

    }
}

たけち: 今回は、41行目に注目してね。41行目の
    transformer.setOutputProperty(OutputKeys.ENCODING, "Shift_JIS");
で、出力するXMLファイルのエンコーディングを"Shift_JIS"とするように記述しているね。

さらら: はい。わかるわ。

たけち: それから、43行目の
    File outfile = new File("sample23.xml");
で、documentという名前で生成したDOMの構造をファイル(sample23.xml)に出力しているよね。

さらら: はい。


■DOMSample23の実行例

たけち: じゃ、このDOMSample23プログラムを実行させてみよう。Eclipseで実行させた場合、実行結果として、図のように作成されたファイル名が表示されるよ。で、その中身を見てみると図のようになっていることが分かるよ。

DOMSample23によるXMLファイルの作成

(注): Eclipseで実行したときには、プロジェクトを選択して、右クリックで表示されるメニューの中から [更新(F)] を選択してください。作成されたファイル名(この例の場合は、sample23.xml)が表示されます。

さらら: manyosyuという空の要素だけがあるXMLファイルができていて、encoding="Shift_JIS"ってなっているわ。なるほどね。

たけち: 今回は、これでおしまい。次回からは、もう少し複雑なXMLファイルを作ってみようね。

さらら: あっ、は〜い。ありがとね。

→ 次回は要素に属性を追加です。....... (^ ^;


たのしいXMLのインデックス