目次へ

2005.11.30 株式会社四次元データ 宮澤了祐

2.3. 属性の取得

次のようなXML文書をSAXで解析するとします。

<?xml version="1.0" encoding="euc-jp" ?>
<root option1="オプション1" option2="オプション2">
    <text>Hello SAX!!!</text>
</root>

属性は、要素が開始した際に要素名等と同時に通知されます。
DefaultHandlerのstartElement()をオーバーライドして受け取ります。

public void startElement(String uri,String localName,String qName,Attributes attributes) {
    ...     
    for(int i=0; i<attributes.getLength(); i++){
        System.out.println("属性名:" + attributes.getQName(i) +
                                     "=" + attributes.getValue(i));
    }
    ...
}

uri・・・名前空間のURI
localName・・・前置修飾子を含まないローカル名
qName・・・前置修飾子を持つ修飾名

org.xml.sax.Attributesによって、属性を取得することが出来ます。
getLength()メソッドによって属性の数を取得します。
getQname(int index)メソッドによって指定した属性の名前を取得します。
getValue(int index)メソッドによって指定した属性の値を取得します。
次のように出力されていれば成功です。

…
要素開始:root
要素名:option1=オプション1
要素名:option2=オプション2
要素開始:text
…

2.4. 名前空間の取得

もともとSAXは名前空間をサポートしないSAX1でしたが、現在では名前空間もサポートするSAX2が使われています。 しかし標準では名前空間のサポートはオフになっています。 名前空間を使用するには次のようにSAXParserを設定する必要があります。

SAXParserFactory sparser = SAXParserFactory.newInstance();

//名前空間の使用をオンにする
sparser.setNamespaceAware(true);

SAXParser parser = sparser.newSAXParser();
parser.parse(new File("sample.xml"), new SaxSample());

これにより名前空間を使用することが出来ます。 名前空間は、要素の開始イベント・終了イベントや名前空間開始イベントなどで通知されます。 イベントハンドラ内で次のメソッドを実装します。これらはContentHandlerで定義されているメソッドです。

public void startPrefixMapping(String prefix, String uri)throws SAXException {
    System.out.println("名前空間宣言開始:"+prefix+"("+uri+")");
}
public void endPrefixMapping(String prefix) throws SAXException {
    System.out.println("名前空間宣言終了:"+prefix);
}
public void startElement(String uri,String localName,String qName,Attributes attributes){
    ...
    System.out.println("要素開始:" + qName);
    System.out.println("LocalName:" + localName);    //名前空間を除いた要素名
    System.out.println("URI" + uri);        //名前空間のURI
    ...
}
public void endElement(String uri,String localName,String qName){
    ...
}

prefix…名前空間名
uri…名前空間のURI

...
<people:name xmlns:people="http://www.4dd.co.jp/peopleinfo">後藤茂夫</people:name>
...

このようなXMLを上記のプログラムで解析した場合、次のような結果が表示されます。

名前空間宣言開始:people(http://www.4dd.co.jp/peopleinfo)
要素開始:people:name
LocalName:name
URI:http://www.4dd.co.jp/peopleinfo
...
名前空間宣言終了:people

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp