DOM: XMLデータを作成する(4) 要素に属性を追加

2007年06月17日(日)更新


■要素に属性を追加

たけち: 今回は、要素に属性をつけてみよう。

さらら: は〜い。属性ノードを追加、ってことね。

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

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

さらら: えっ〜と、、、manyosyu要素の子要素にvolume要素があるのね。で、volume要素に値が"01"のvolume属性があるのね。

たけち: そうそう。じゃ、このXMLデータをどう作るかを図に示しておくね。

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


■属性の追加方法

たけち: 図の「D no属性の追加」について説明するね。

さらら: はい。

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

ElementクラスのsetAttributeメソッド

void

setAttribute(String name,String value)

・機能: ノードに新しい属性を追加します。
・パラメタ: 
     String name : 属性の名前
     String value : 属性の値
・戻り値: ありません

さらら: これだけでいいの?

たけち: そうだよ。(ネームスペースURIを持つ属性を追加するときは、setAttributeNSを使います。)

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


■DOMサンプルプログラム 属性を追加

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

さらら: はい。

DOMサンプルプログラム(24) DOMSample24.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
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 DOMSample24 {

    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);
			
         /*
          * DOMオブジェクトをファイルとして出力
          */ 
         TransformerFactory tfactory = TransformerFactory.newInstance(); 
         Transformer transformer = tfactory.newTransformer(); 

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

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

    }
}

たけち: 今回は、36行目に注目してね。36行目の
    volume.setAttribute("no", "01");
で、volume要素に、値が"01"のno属性を追加するように記述しているね。

さらら: はい。


■DOMSample24の実行例

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

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

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

さらら: manyosyu要素のvolume子要素に値が"01"のno属性が設定されているわ。なるほどね。

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

さらら: えぇ、。いつもありがとね。

→ 次回はテキストノードを追加です。....... (^ ^;


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