Since:2000/08/03  Copyright (c) 1997-2001 Masaki Honda
Last Update:2001/11/07 Style:Type-E

属性の作成


■ 状況
 要素の中に属性を追加したいとします。XML 文書の変換 で使用した XML 文書を作成します。


XML ファイルサンプル
<?xml version="1.0" encoding="Shift_JIS"?>
<Sample>
 <Result Name="A" Score="65" />
 <Result Name="B" Score="82" />
 <Result Name="C" Score="60" />
 <Result Name="D" Score="76" />
</Sample>


■ 解説
属性 (Attribute) は、要素の一部です。属性は、

  名前="値"

のペアで構成されます。上のサンプル文書の例では、属性名が "Name"、値が "A" というわけです。 属性を追加するにはまず、要素を作成しなければなりません。そのうえで、属性を要素に追加します。属性を作成するにはいくつか方法があります。Node のメソッドで、ノードに関するさまざまな操作ができるので、Element に追加されているメソッドは、主に属性とその値にかかわっているものです。DOM のインターフェースで属性を担当するのは、Attr です。DOM の初期版では attribute インターフェースだったのが、IDL のキーワード [attribute] と紛らわしいので Attr に変更されたのだそうです。それではまず属性の文書への追加の仕方です。

  // Document オブジェクトを作成します。
  Document document = new XmlDocument();
  // Result というタグを持った要素を作成します。
  Element element = document.createElement("Result");
  // Name という名前の属性を作成します。
  Attr name = document.createAttribute("Name");
  // Name 属性の値を A とします。
  name.setValue("A");
  // Name 属性を Result 要素に追加します。
  Attr attr = element.setAttributeNode(name);
  // Result 要素を XML 文書に追加します。
  Node node = document.appendChild(element);

  このようにすることで、<Result Name="A" /> と作成されます。

属性を作成するには、 Document の createAttribute メソッドを使用します(3行目)。引数には、作成する属性の名前を指定します。上の例では Name です。
Attr には、属性の値を設定する setValue メソッドがあります(4行目)。引数に属性の値を指定します。ここでは "A" を指定しました。
Element には、setAttributeNode メソッドがあります。引数には Attr オブジェクト、戻り値には設定された Attr オブジェクトが返ります。
そして最後に、Result 要素を文書に追加しています。

 これが属性の作成(その1)です。Attr オブジェクトがあるときはこの方法を取ればいいでしょう。先ほども書いたように、Element には属性の操作を行うメソッドが追加されています。中でも setAttribute メソッドは一番簡単に属性を追加できると思います。

  // Document オブジェクトを作成します。
  Document document = new XmlDocument();
  // Result というタグを持った要素を作成します。
  Element element = document.createElement("Result");
  // Result 要素に Name という名前、A という値を持った属性を作成します。
  element.setAttribute("Name", "A");
  // Result 要素を XML 文書に追加します。
  Node node = document.appendChild(element);

  結果は同じで、<Result Name="A" /> と作成されます。

こちらの方が簡単でしょう。新規に文書を作成する場合はこちらを使った方がコードの量も減るのでおすすめです。このサイトでは属性を作成する場合、こちらのメソッドを使用していくことにします。

■ サンプル
 - Java -

 j01_05_01.java >> Download (1.20 KB)

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;

public class j01_05_01{
 public static void main(String[] args){
  // 属性の名前、値を配列で持ちます。
  String AttributeName[] = {"A", "B", "C", "D"};
  String AttributeScore[] = {"65", "82", "60", "76"};

  // Document オブジェクトを作成します。
  Document doc = new XmlDocument();

  Element root, element;
  Node node;

  // ルート要素を作成します。
  root = doc.createElement("Sample");
  // ルート要素を文書に追加します。
  node = doc.appendChild(root);

  // 要素 と 属性 を作成し、文書に追加します。
  for(int i = 0; i < AttributeName.length; i++){
   // 要素 Result を作成します。
   element = doc.createElement("Result");
   // 属性 "Name" を作成します。
   element.setAttribute("Name", AttributeName[i]);
   // 属性 "Score" を作成します。
   element.setAttribute("Score", AttributeScore[i]);
   // Result を文書のルート要素に追加します。
   node = root.appendChild(element);
  }

  // コンソールに XML 文書を表示させます。
  try{
   ((XmlDocument)doc).write(new PrintWriter(System.out), "Shift_JIS");
  }catch(IOException e){
   e.printStackTrace();
  }
 }
}

 実行すると下の画像のようになります。


[PR]中古車探しは、ガリバー:在庫多数、全車保証つき!