- 3.1. NodeList
- 3.2. Element
- 3.3. NamedNodeMap
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要素の内容

