|
2007年06月17日(日)更新 |
■属性の値を取得する
|
たけち: 前回は、テキストノードの値を取得するメソッドについて学んだね。 さらら: えぇ、getNodeValueメソッドだったわね。 たけち: で、今回は、属性の値を取得するメソッドを学ぼう。 さらら: あっ、はい。 たけち: 属性の値を取得するには、今回は次のような手順を踏むね。 |
|
|

|
さらら: getAttributeは前にノードの内容を取得するのに使ったわね。NamedNodeMapってなに? たけち: NamedNodeMapは、名前付けされた複数のノードを持っているんだ。 さらら: そうなんだ。だから、名前を指定したgetNamedItem(属性名)で、属性ノードを取ってこれるのね。 たけち: そうなんだね。で、今回は、これまでのサンプルXMLデータに属性を追加したものを使って、その属性の値を取得してみようね。まずは、getAttributesメソッドとのgetNamedItemメソッド書き方を見ておこうね。 さらら: は〜い。 |
|
getAttributesメソッド
NamedNodeMap | getAttributes() |
|---|---|
| 機能: 要素ノードに関連付けられている属性を持っているNamedNodeMapを取得します。 | |
| パラメタ: 無し | |
| 戻り値: NamedNodeMap 属性を持っているNamedNodeMap null 要素ノードに関連付けられている属性を持っているNamedNodeMapが無い場合 |
getNamedItemメソッド
Node | getNamedItem(String name) |
|---|---|
| 機能: NamedNodeMapから、指定した名前のノードを取得します。 | |
| パラメタ: ノードの名前 | |
| 戻り値: Node ノード null 指定した名前の属性が無い場合 |
■サンプルXMLデータ
|
たけち: じゃ、今回は属性を持った、ごくごく簡単なsample2.xmlファイルを使ってテキストノードの内容を表示してみよう。 さらら: はい。次のXMLデータね。 |
| サンプルXMLデータ(2) sample3.xml |
|---|
|
<?xml version="1.0" encoding="UTF-8" ?> |
|
さらら: noteとstudentっていう名前の属性があるのね。 たけち: そうだね。sample3.xmlのDOMツリーの概観を確認しておこう。 さらら: あっ、はい。 |

■DOMサンプルプログラム(5)
|
たけち: じゃ、次に今回のDOMサンプルプログラム(5)のソースコードを載せておくね。 さらら: はい。 |
| 行 | DOMサンプルプログラム(5) DOMSample5.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 |
package dom.study.sample_1;
import java.io.IOException;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public class DOMSample5 {
public static void main(String[] args) {
String file = args[0];
try {
DOMParser parser = new DOMParser(); // パーサの生成
parser.parse(file); // XMLファイルのパース
Document document = parser.getDocument(); // DOCUMENTノードの取得
if (document.hasChildNodes()) { // 子ノードがある場合
Node node = document.getFirstChild(); // DOCUMENTノードの最初の子ノード
NamedNodeMap attrs = node.getAttributes(); // NamedNodeMapの取得
if (attrs!=null) {
Node attr = attrs.getNamedItem("note"); // note属性ノード
System.out.println("note属性 = " + attr.getNodeValue()); // note属性の値
attr = attrs.getNamedItem("student"); // student属性ノード
System.out.println("student属性 = " + attr.getNodeValue()); // student属性の値
}
} else {
System.out.println("DOCUMENTノードに子ノードがありません。");
}
} catch (SAXException e) {
System.out.println("XMLデータが不正です。");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
|
さらら: えっ〜と。。。26行目の たけち: そうだね。 さらら: で、30行目の たけち: そうなんだね。そんなに難しくないでしょ。 さらら: えぇ。 |
|
■DOMSample5の実行例(sample3.xmlの処理)
|
たけち: じゃ、sample3.xmlファイルを指定して、DOMSample5プログラムを実行させてみよう。実行結果は次のようになるよ。 |
| DOMサンプルプログラム(5) DOMSample5.javaの実行結果 |
|---|
|
note属性 = DOM学習 student属性 = さらら |
|
さらら: それぞれの要素ノードの内容が表示されているわ。 たけち: 今回は、属性名があらかじめわかっているときの属性ノードの内容を取得したね。 さらら: あっ、はい。 たけち: じゃね今回は、これでおしまい。おつかれさま。 さらら: あっ、は〜い。ありがとね。 → 次回は、NamedNodeMapのメソッドについての補足です。....... (^ ^; |