|
2007年06月17日(日)更新 |
■テキストノードの値を取得する
|
たけち: 前回は、兄弟ノードを取得するメソッドについて学んだね。 さらら: えぇ、そうして、XMLデータの内容をたどって見たわね。 たけち: で、今回は、テキストノードの値を取得するメソッドを学ぼう。 さらら: あっ、はい。 たけち: テキストノードの値を取得するには、getNodeValueメソッドを使うんだ。 さらら: getTextValueとかじゃ、ないのね。 たけち: あっ、気がついたね。実は、getNodeValueメソッドは、属性ノード、テキストノード、コメントノードなどのノードの値を取得するためのメソッドなんだ。 さらら: あっ、そうなんだ。 たけち: 今回は、テキストノードについて、その値を取得してみようね。まずは、getNodeValueメソッドの書き方を見ておこうね。 さらら: は〜い。 |
|
getNodeValueメソッド
String | getNodeValue() |
|---|---|
| 機能: このノードの内容を取得します。 | |
| パラメタ: ありません | |
| 戻り値: String ノードの内容(文字列) null ノードが次の場合 要素ノード、 要素参照ノード、 エンティティノード、 ドキュメントノード、 ドキュメントタイプノード、 ドキュメントフラグメントノード、 記法ノード |
■サンプルXMLデータ
|
たけち: じゃ、今回は前回と同じsample2.xmlファイルを使ってテキストノードの内容を表示してみよう。 さらら: はい。次のXMLデータね。 |
| サンプルXMLデータ(2) sample2.xml |
|---|
|
<?xml version="1.0" encoding="UTF-8" ?> |
|
さらら: childって名前の兄弟の要素が3つあるから、「子1です」、「子2です」と「子3です」という文字列を取得して表示するのね。 たけち: そうだね。前回と同じだけど、sample2.xmlのDOMツリーの概観を確認しておこう。 さらら: あっ、はい。 |

|
さらら: あっ、ほかの場所にも、テキストノードかあったんだわ。 たけち: 人が見て分かりやすいようにsample2.xmlに入れた改行も、DOMツリーではTEXTノードとして扱われるからね。 さらら: う〜ん。。。じゃあ、どうしたらいい? たけち: さららが、「どうしたらいい?」って思うってことは、それが余分な文字列だと思っているんだよね。 さらら: そっ、そう言われればそうね。本当に余分なのかどうかは。。 たけち: このあたりについては、またそのうち考えてみることにして、今回は、すべてのテキストノードについて、getNodeValueメソッドで、その内容をそのまま表示しておこうと思うんだ。 さらら: えぇ、わかったわ。 |
|
■DOMサンプルプログラム(4)
|
たけち: じゃ、次にDOMサンプルプログラム(4)のソースコードを載せておくね。 さらら: はい。 |
| 行 | DOMサンプルプログラム(4) DOMSample4.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 50 51 52 53 54 55 |
package dom.study.sample_1;
import java.io.IOException;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public class DOMSample4 {
public static void main(String[] args) {
String file = args[0];
try {
DOMParser parser = new DOMParser(); // パーサの生成
parser.parse(file); // XMLファイルのパース
Document document = parser.getDocument(); // DOCUMENTノードの取得
traceNodes(document); // すべての子ノードをたどる
} catch (SAXException e) {
System.out.println("XMLデータが不正です。");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
static private void traceNodes(Node node) {
Node child=node.getFirstChild(); // 子ノードを取得
while (child!=null) {
printTextNode(child); // ノードの情報を表示
traceNodes(child); // さらに子ノードをたどる
child = child.getNextSibling(); // 兄弟ノードを取得
}
}
static private void printTextNode(Node node) {
// TEXT_NODEのときに、node.getNodeValue()
if (node.getNodeType()==Node.TEXT_NODE) {
System.out.println("テキストノード値 = " + node.getNodeValue()); // ノード値
}
}
} |
|
さらら: えっ〜と。。。47行目の たけち: これは、いま見ているノードがテキストノードかどうかを判断しているんだね。 さらら: そっか。で、ノードがテキストノードの時に49行目の たけち: そうなんだね。そんなに難しくないでしょ。 さらら: えぇ。 |
|
■DOMSample4の実行例(sample2.xmlの処理)
|
たけち: じゃ、sample2.xmlファイルを指定して、DOMSample4プログラムを実行させてみよう。実行結果は次のようになるよ。 |
| DOMサンプルプログラム(4) DOMSample4.javaの実行結果 |
|---|
|
テキストノード値 = テキストノード値 = テキストノード値 = 子1です テキストノード値 = テキストノード値 = 子2です テキストノード値 = テキストノード値 = 子3です テキストノード値 = |

|
さらら: 順にテキストノードの内容が表示されているわ。 たけち: だいたいの雰囲気はわかったかな。 さらら: はい。 たけち: じゃね今回は、これでおしまい。次は、属性ノードについてみてみようかな。 さらら: あっ、は〜い。 → 次回は、属性の値を取得するです。....... (^ ^; |
|