倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

SAXParserFactory, SAXParser

javax.xml.parsers パッケージ内のクラスとそれに関連するクラスを何回かにわたって見ていきます(記事一覧)。 今回は SAX 関連のクラス SAXParserFactorySAXParser です。

SAXParser オブジェクトの取得方法


SAX による解析を行うには SAXParser オブジェクトが必要ですが、SAXParser は抽象クラスのため、コンストラクタによって直接インスタンス化することはできません。 SAXParser のインスタンスを取得するためには、以下の手順を踏みます:

  1. SAXParserFactory のインスタンスを取得する。
  2. (必要なら)SAXParserFactory の設定をする。
  3. 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 という形のメソッドのペア。