2006年03月26日(日)更新 |
■SAXで、要素の属性を取得
たけち: 前回まででSAXを使用した簡単なプログラムを作成してみて、だいたいのイメージをつかんだね。 さらら: えぇ。いろいろと準備がたいへんだったけど。。。 たけち: 今回からは、要素の属性と内容を取得するための処理を追加してみようね。 さらら: そうね。「要素が始まりました。」だけじゃ、つまんないものね。 |
■サンプルXMLデータの変更
たけち: じゃ、まずは、サンプルXMLデータにつぎのようにpno属性とptype属性を追加してみよう。pno属性は、万葉集の歌の番号を、ptype属性は歌の種類を示すことにするね。 さらら: はい。それで、プログラムで属性をみることを確認するのね。 たけち: そうだよ。 |
サンプルXMLデータ(属性を追加) sample.xml |
---|
<?xml version="1.0" encoding="UTF-8" ?> |
■要素の属性を取得する方法
たけち: まずは、要素の属性を取得する方法をみておこうね。 さらら: はい。 |
たけち: 上の図に説明してあるように、startElementのパラメタに、Attributesが渡されるんだね。 さらら: そうなの。。。 たけち: Attributesには、属性名と属性値が順番に含まれているんだ。で、Attributesから、属性名や属性値をとってくるには、つぎのようなメソッド(主なものだけを掲載しています)を使うんだ。 |
Attributesのメソッド | 取得できるもの |
---|---|
getIndex("属性名") | "属性名"のインデックス(インデックスは 0〜) |
getLength() | Attributesに含まれる属性の数 |
getQName(インデックス) | インデックスに対応する属性名 |
getType(インデックス) | インデックスに対応する属性の型(CDATAなど) |
getValue(インデックス) | インデックスに対応する属性の値 |
■SimpleSAXHandlerのstartElementメソッドに処理を追加
さらら: う〜ん。。。具体的にどう書いたらいいか、わからないわ。 たけち: じゃ、簡単な例を書いて実行してみよう。 さらら: えぇ、お願い。。 たけち: じゃ、前回までに作成したSimpleSAXHandlerのstartElementメソッドに処理を追加してみるから。 |
SimpleSAXHandler.javaのstartElementメソッド (属性の取得・表示を追加) |
---|
public void startElement(String uri, |
■変更したプログラムでサンプルXMLデータの読込みを実行
たけち: コメントを書いておいたから、だいたいのイメージはわかると思うけど、どう? さらら: attributes.getLength()でAttributesに含まれる属性の数を求めておいてから、その数の分だけ、インデックス(変数 i )を使って、getQName()で属性名、そしてgetValue()で属性値をとってきているのね。 たけち: そうそう。じゃ、実際にEclipseを使って実行してみるね。 さらら: あっ、そうだね。 |
■サンプルXMLデータの読込み結果の確認
たけち: poem要素のpno属性とptype属性が、ちゃんと表示されているよね。 さらら: そうね。 |
たけち: 今回は、SAXでの属性の取得についてやってみたけど、どうだった?。 さらら: だいたいのイメージは理解できたと思うわ。あぁ、もう少しJavaのプログラミングが分かるとたのしいんだろうけど。。 たけち: じゃ、今回はここまで。次回は、要素の内容を取得してみよう。。 さらら: あっ、は〜い。 →次回は、要素の内容を取得する例です。・・・ (^ ^; |