- 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要素の内容