SAX(11) サンプルプログラムの作成(6): 要素内容の取得

2006年04月09日(日)更新


SAXで要素内容を取得

たけち: 前回はSAXを使って要素の属性を取得したね。

さらら: えぇ。startElementメソッドで属性が渡されてくるんだったわね

たけち: 今回は、要素の内容を取得するための処理を追加してみようね。そのためにはcharactersメソッドを使うんだよ。

さらら: はい。


サンプルXMLデータ

たけち: サンプルXMLデータは前回と同じものを使うね。

さらら: はい。それで、プログラムで要素内容を表示してみるのね。

たけち: そうだよ。

サンプルXMLデータ sample.xml

<?xml version="1.0" encoding="UTF-8" ?>
<sample>
    <name>持統天皇</name>
    <poem pno="0028" ptype="雑歌">春過ぎて夏来るらし白妙の衣干したり天の香具山</poem>
    <poem pno="0161" ptype="挽歌">北山にたなびく雲の青雲の星離り行き月を離れて</poem>
    <poem pno="0236" ptype="雑歌">いなと言へど強ふる志斐のが強ひ語りこのころ聞かずて我れ恋ひにけり</poem>
</sample>


要素内容を取得する方法: charactersメソッド

たけち: まずは、SAXで要素内容を取得する方法をみておこうね。

さらら: はい。

内容の取得

たけち: 最初のパラメタの ch に読み込んだXMLファイルの文字データが入っていて二番目のパラメタ start に該当する要素内容の開始位置が、そして文字数が三番目のパラメタ length に入っているんだよね。

さらら: そうなんだ。


SimpleSAXHandlerにcharactersメソッドを追加

さらら: で、要素内容を取得するのに、SimpleSAXHandlerにcharactersメソッドを追加するのね。

たけち: そうそう。じゃ、簡単な例を書いて実行してみよう。

さらら: えぇ、お願い。。

たけち: じゃ、前回までに作成したSimpleSAXHandlerに次のようなcharactersメソッドを追加してみよう。

SimpleSAXHandler.javaのcharactersメソッド
(要素内容の取得・表示)

    /*
     * 要素の内容を取得します
     */

    public void characters(char[] ch, int start, int length)
    {

    System.out.println(new String(ch, start, length));

    }


変更したプログラムでサンプルXMLデータの読込みを実行

さらら: あら、このサンプルだとそのまんま表示するだけなのね。

たけち: そう。じゃ、実際にEclipseを使って実行してみるね。

さらら: えぇ。

sample.xmlを読み込んだ例の確認

たけち: poet要素の内容である「持統天皇」という文字列と各poem要素の内容が、ちゃんと表示されているよね。

さらら: そうね。わかったわ。

たけち: このほかにもSAXを利用して、XMLデータの行数を取得したり、名前空間を取得したりすることができるけど、とりあえず今回で終わりにするね。。

さらら: はい。だいたいのことが分かってうれしいわ。

たけち: じゃ、SAXはここまで。このあとは、DOMについて学んでみようね。

さらら: あっ、そうだね。たのしみ〜。

→SAXは、とりあえずこれで終わりです。・・・ (^ ^;