javax.xml.parsers パッケージ内のクラスとそれに関連するクラスを何回かにわたって見ていきます(記事一覧)。 今回は SAX 関連のクラス SAXParserFactory と SAXParser です。
SAXParser オブジェクトの取得方法
SAX による解析を行うには SAXParser オブジェクトが必要ですが、SAXParser は抽象クラスのため、コンストラクタによって直接インスタンス化することはできません。 SAXParser のインスタンスを取得するためには、以下の手順を踏みます:
具体的にソースコードを書くと、次のようになります(例外処理は省略):
// 1. SAXParserFactory のインスタンスを取得する。 SAXParserFactory factory = SAXParserFactory.newInstance(); // 2. SAXParserFactory の設定をする。 factory.setNamespaceAware(true); // 3. SAXParser のインスタンスを取得する。 SAXParser parser = factory.newSAXParser();
SAXParserFactory の設定が必要なく、手軽に使いたい場合は、次のようにもできます:
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
解析の実行方法は次回。 以下では、SAXParserFactory, SAXParser をもう少し詳しく見ていきます。
javax.xml.parsers.SAXParserFactory
SAXParserFactory に定義されている(JavaBeans としての)プロパティ*1は
プロパティ | 型 | 説明 |
---|---|---|
namespaceAware | boolean | 名前空間を識別するかどうか。 |
validating | boolean | 妥当性検証を行うかどうか。 ただし、schema プロパティがセットされた場合は、このプロパティに関係なく妥当性検証が行われる。 |
xIncludeAware | boolean | XInclude を処理するかどうか。 |
schema | javax.xml.validation.Schema | 妥当性検証を行うためのスキーマ定義(以前の記事も参照のこと) |
boolean 型のプロパティは全て、初期値が false です。
javax.xml.parsers.SAXParser
メソッド parse() によって SAX による解析を実行します。 これは次回に。
SAXParserFactory に定義されていたようなメソッドが幾つか定義されていますが(例えば isNamespaceAware())、値の取得はできても設定ができないことに注意しましょう。 一度 SAXParser のインスタンスを取得してしまうと、その設定は固定されてしまいます。
ただし、property プロパティだけは設定できます(つまり、setProperty() メソッドが定義されています)。 これは次回以降に使い方のサンプルを紹介します。
*1:要は getXxx, setXxx または isXxx, setXxx という形のメソッドのペア。