DOM: XMLデータを作成する(5) テキストノードを追加

2007年06月17日(日)更新


■テキストノードを追加

たけち: 前回は属性ノードをを追加したけど、今回は、テキストノードを追加してみよう。

さらら: は〜い。

たけち: 今回は次のようなXMLファイルを作成してみよう。

今回生成するXMLファイル例 sample25.xml
<?xml version="1.0" encoding="UTF-8"?>
<manyosyu><volume no="01"/>万葉集 巻一</manyosyu>

さらら: 前回に作成したXMLファイルに「万葉集 巻一」って文字列が追加されるのね。

たけち: そうそう。じゃ、このXMLデータをどう作るかを、テキストノードの箇所を中心に図に示しておくね。属性の追加などは、前回の図を参照してね。

さらら: はい。

出力サンプルXMLデータ(sample25.xml)の構造と作成手順の例


■テキストノードの生成方法

たけち: 図の「F テキストノードの生成」について説明するね。

さらら: はい。

たけち: 次のように、DocumentクラスのcreateTextNodeメソッドを使えばいいんだよ。

DocumentクラスのcreateTextNodeメソッド

Text

createTextNode(String textdata)

・機能: 指定されたテキストを含むテキストノードを作成します。
・パラメタ: 
     String textdata : テキストノードの内容とするテキスト
・戻り値: Textオブジェクト

さらら: テキストノードの内容とする文字列を指定するだけでいいのね?

たけち: そうだよ。

さらら: よかった。簡単ね。


■DOMサンプルプログラム テキストノードを生成・追加

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

さらら: はい。

DOMサンプルプログラム(25) DOMSample25.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
56
57
58
59
60
61
62
63
64
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;
import org.w3c.dom.Text;

public class DOMSample25 {

    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に追加

         /*
          * volume要素を生成し、no属性を追加
          */
         Element volume = document.createElement("volume");
          volume.setAttribute("no", "01");
         root.appendChild(volume);

         /*
          * テキストノードを生成し、volumeノードの子要素として追加
          */
         Text textnode= document.createTextNode("万葉集 巻一");
         volume.appendChild(textnode);

         /*
          * DOMオブジェクトをファイルとして出力
          */ 
         TransformerFactory tfactory = TransformerFactory.newInstance(); 
         Transformer transformer = tfactory.newTransformer(); 

         File outfile = new File("sample25.xml");
         transformer.transform(new DOMSource(document), new StreamResult(outfile)); 

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

    }
}

たけち: 今回は、43行目に注目してね。43行目の
    Text textnode= document.createTextNode("万葉集 巻一");
で、内容が"万葉集 巻一"のテキストノードを生成するように記述しているね。

さらら: ええ。で、その後の44行目の
    volume.appendChild(textnode);
で、volumeノードの子要素として追加するように記述しているのね。


■DOMSample25の実行例

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

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

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

さらら: manyosyu要素のvolume子要素の内容が"万葉集 巻一"になっているわ。これで文字列内容を持った要素ができあがるのね。

たけち: 今回も、そんなに難しくなかったよね。

さらら: はい。ありがとう。

→ 次回はノードを指定したノードの前に追加です。....... (^ ^;


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