目次へ

3.2. Element

要素ノードはElementインタフェースで操作します。ElementもNodeを継承していますから、Nodeにあるメソッドは全て使用可能です。Elementインタフェースの場合、Nodeより継承したメソッドの戻り値は以下のようになります。

メソッド 内容
public String getNodeName()  要素名(要素タグの名前)
public String getNodeValue() null

その他にも、以下のようなメソッドが用意されています。

メソッド 内容
public String getTagName() 要素の名前を取得する。例えば、以下の要素があったとします。
<elementExample id="demo"> ... </elementExample>
要素の名前は、"elementExample"になります。
public String getAttribute(String name) 引数に指定した名前の属性の、属性値を取得します。属性が値を存在せず、デフォルト値も設定されていない場合は""(空文字列)が返されます。
public Attr getAttributeNode(String name)

引数に指定した名前の属性ノードを取得します。指定された名前の属性が存在しない場合は、nullが返されます。

public NodeList getElementsByTagName(String name)

引数で指定された名前の子孫要素全てを含む NodeListを返す。NodeListの要素の順番は、XML文書での出現順となる。

public boolean hasAttribute(String name)

引数で指定された名前の属性を持つかどうか、判定する。属性が指定されている、または属性がデフォルトの値を持つ場合、trueが返される。属性が存在せず、デフォルト値も設定されていない場合、falseが返される。

NodeListやElementを使用すれば、前章「実習課題2」のプログラムは以下のように書けます。

     1  import java.io.*;
     2  import org.w3c.dom.Document;
     3  import org.w3c.dom.Node;
     4  import org.w3c.dom.NodeList;
     5  import org.w3c.dom.Element;
     6  import javax.xml.parsers.*;
     7
     8  public class GetNamesSample{
     9      
    10      public static void main(String args[]) throws Exception{
    11
    12          Document document= DocumentBuilderFactory
    13              .newInstance()
    14              .newDocumentBuilder()
    15              .parse(new File("employee.xml"));
    16
    17          Element rootElement=document.getDocumentElement();
    18          NodeList empNodes=rootElement.getElementsByTagName("employee");
    19          for(int i=0;i<empNodes.getLength();i++){
    20              Element emp=(Element)empNodes.item(i);
    21              NodeList nameElements=emp.getElementsByTagName("name");
    22              if(nameElements.getLength()>0){
    23                  System.out.println((i+1)+"番目の社員 名前:"
    24                                     +nameElements.item(0)
    25                                     .getFirstChild().getNodeValue());
    26              }
    27                      
    28          }
    29      }
    30      
    31  }

まず、17行目でルート要素を取得しています。DocumentのgetDocumentElement()の戻り値はElementです。次に、18行目でgetElementsByTagName()メソッドを使用し、employee要素のリストを取得します。19−28行目でemployee要素の子要素のnameの値を取得し、順番に表示しています。

他にもDOMには、各要素の種類ごとにインタフェースが用意されています。まずは、Node、NodeList、Elementのインタフェースを理解すれば、充分XML文書を読んで解釈することが可能でしょう。

(実習課題1)

以下のプログラムを作成しなさい。

  • employees2.xmlファイルより、従業員の名前を取得し、表示する
  • 引数で指定した従業員番号の従業員の名前を表示する
  • 従業員番号はemployee要素のno属性の値
  • 従業員の名前は、name要素の内容

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp