|
| |
2002/02/03 田中宏和 |
| Last Update
2002/12/08 |
|
 |
XML(SAX)編 |
 |
◆SAXとは? |
| SAXはSimple API for XMLの略です。DOM(Document
Object Model)と並んでXMLを解析するために使用する標準APIです。SAXはXML文書を先頭から読んでいきそこで発生したイベントをアプリケーションでとらえて処理するAPIです。DOMに比べて、メモリ消費量が少ない、解析速度が速いなどのメリットがありますが、ノードの追加、削除など、XML文書を更新する機能はありません。 |
| ◆発生するイベントとその場所 |
| XML文書 |
イベント |
| |
ドキュメントの開始時
→ startDocument()メソッド |
| <?xml
version="1.0" encoding="Shift_JIS"
?> |
|
| <message> |
エレメントの開始タグ読み込み時
→ startElement()メソッド |
| Hello
World |
テキストデータ読み込時
→ characters()メソッド |
| </message> |
エレメントの終了タグ読み込み時
→ endElement()メソッド |
|
|
ドキュメントの終了時
→ endDocument()メソッド |
|
| |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.3.1_01 |
|
|
|
| ◆Javaの実行環境の構築 |
| アプリケーション編を参考にJ2SE SDKをインストールしてJavaの実行環境を構築します。 |
| ◆SAXのAPIのライブラリをCLASSPATHに追加(J2SE
SDK 1.3以下の場合) |
J2SE SDKのバージョンが1.3以下の場合、SAXのAPIを使用可能にしなければなりません。1.4以上の場合はJ2SE
SDKにSAXのAPIが含まれているので追加する必要はありません。ここでは、JAXP(Java API for XML
Processing)を使用します。JAXPはJava XML Packに入っています。
Java XML Packのダウンロード → Java
XML Pack
ダウンロードしましたら解凍したフォルダに入っているjaxp-api.jar、dom.jar、sax.jar、xercesImpl.jarをCLASSPATHに追加してください。追加方法はアプリケーション編を参考にしてください。 |
|
| ◆XMLファイルの用意 |
| テキストエディタで以下の内容のXMLファイルを作成してください。 |
| helloworld.xml(ここからダウンロード) |
| <?xml version="1.0" encoding="Shift_JIS"
?> <message>Hello World</message> |
|
| ◆Javaソースコードの作成 |
| HelloWorldSax.java(ここからダウンロード) |
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
public class HelloWorldSax extends DefaultHandler {
public static void main(String[] argv) {
try {
// SAXパーサーファクトリを生成
SAXParserFactory spfactory = SAXParserFactory.newInstance();
// SAXパーサーを生成
SAXParser parser = spfactory.newSAXParser();
// XMLファイルを指定されたデフォルトハンドラーで処理します
parser.parse(new File("helloworld.xml"), new HelloWorldSax());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* ドキュメント開始時
*/
public void startDocument() {
System.out.println("ドキュメント開始");
}
/**
* 要素の開始タグ読み込み時
*/
public void startElement(String uri,
String localName,
String qName,
Attributes attributes) {
System.out.println("要素開始:" + qName);
}
/**
* テキストデータ読み込み時
*/
public void characters(char[] ch,
int offset,
int length) {
System.out.println("テキストデータ:" + new String(ch, offset, length));
}
/**
* 要素の終了タグ読み込み時
*/
public void endElement(String uri,
String localName,
String qName) {
System.out.println("要素終了:" + qName);
}
/**
* ドキュメント終了時
*/
public void endDocument() {
System.out.println("ドキュメント終了");
}
}
|
|
|
|
| ■メソッドの説明 |
| メソッド |
説明 |
| startDocument() |
ドキュメントの開始時の実行される。 |
| endDocument() |
ドキュメントの終了時に実行される。 |
| startElement() |
エレメントの開始タグ読み込み時に実行される。 <Parameters>
uri・・・名前空間のURI localName・・・前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
qName・・・ 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列
attributes・・・指定された属性またはデフォルトの属性 |
| endElement() |
エレメントの終了タグ読み込み時に実行される。 <Parameters>
uri・・・名前空間のURI localName・・・前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
qName・・・ 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列
|
| characters() |
テキストデータ読み込み時に実行される。 <Parameters>
ch・・・テキストデータが格納されたchar型の配列
offset・・・配列に格納されているテキストデータのスタート位置
length・・・ 配列に格納されているテキストデータの長さ |
|
| |
| ◆コンパイル |
| コマンドプロンプト |
| C:\JavaHello\Sax>javac
HelloWorldSax.java
C:\JavaHello\Sax> |
|
| ◆実行 |
| コマンドプロンプト |
| C:\JavaHello\Sax>java
HelloWorldSax
ドキュメント開始
要素開始:message
テキストデータ:Hello World
要素終了:message
ドキュメント終了
C:\JavaHello\Sax> |
|
| おおおお!!表示されましたね! |
| |
■書籍 Java関連の書籍
XML関連の書籍 |
|
| |
|
| |
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |