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