前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

19.4. XML パーサー

19.4.1. DOM パーサーと SAX パーサー

DOM ( Document Object Model ) パーサーとして SFXXMLDOMParser クラス、 SAX ( Simple API for XML ) パーサーとして SFXXMLSAXParser クラスが利用可能です。

DOM パーサーは XML 文書をひとつの DOM ツリーとしてメモリ上に展開します。 XML 文書の操作は簡単ですが、多くのメモリが必要になります。

SAX パーサーは XML 文書を先頭から順次読み込み、イベントドリブンで処理する API です。

SAX は DOM ツリーをメモリ上に構築しないので、DOM よりも少ないメモリで処理できます。 また、DOM の場合、DOM ツリーを構築するまでは次の処理に移れませんが、 SAX は解析しながら処理を行うので高速です。

表 19.11. DOM パーサーと SAX パーサー

比較項目 DOM パーサー SAX パーサー
特徴 複雑な文書構造を持つ XML 文書を簡単に処理できる 要素の出現順に XML 文書を少ないメモリで高速に処理できる
プログラミング モデル DOM ツリー イベント駆動
メモリ消費量 多い 少ない
スピード 早い 遅い
アクセス方法 ランダム 順次
プログラム サイズ 小さい 大きい

19.4.2. SFXXMLDOMParser と SFXXMLSAXParser の基本機能

SFXXMLDOMParser クラスと SFXXMLSAXParser クラスの基本機能は以下の通りです。

■ XML 文書の解析

表 19.12. XML 文書を解析するための関数

SFXXMLDOMParser クラス SFXXMLSAXParser クラス
SFXXMLDOMParser::Parse 関数 SFXXMLSAXParser::Parse 関数

■パーサー属性の設定

表 19.13. パーサーの属性を設定するための Set 系関数

SFXXMLDOMParser クラス SFXXMLSAXParser クラス 関数の解説
SFXXMLDOMParser::SetGrammar 関数 SFXXMLSAXParser::SetGrammar 関数 パーサーが使用する文法を設定します。
SFXXMLDOMParser::SetDoNamespaces 関数 SFXXMLSAXParser::SetDoNamespaces 関数 名前空間を処理するかどうかを設定します。
SFXXMLDOMParser::SetDoSchema 関数 SFXXMLSAXParser::SetDoSchema 関数 スキーマを処理するかどうかを設定します。
SFXXMLDOMParser::SetSchemaLocation 関数 SFXXMLSAXParser::SetSchemaLocation 関数 スキーマ付き XML 文書の XSD ファイルを設定します。
SFXXMLDOMParser::SetValidationSchema 関数 SFXXMLSAXParser::SetValidationSchema 関数 XML 文書をスキーマで検証するかどうかを設定します。
SFXXMLDOMParser::SetLoadExternalDTD 関数 SFXXMLSAXParser::SetLoadExternalDTD 関数 DTD 付き XML 文書に対し、外部の DTD ファイルをロードするかどうかを設定します。
SFXXMLDOMParser::SetValidationDTD 関数 SFXXMLSAXParser::SetValidationDTD 関数 XML 文書を DTD で検証するかどうかを設定します。
SFXXMLDOMParser::SetCreateCommentNodes 関数 ------ Comment ノードを生成するかどうかを設定します。
SFXXMLDOMParser::SetDoIndent 関数 SFXXMLSAXParser::SetDoIndent 関数 インデント処理を行うかどうかを設定します。
[Caution] デフォルト値

パーサーの属性を設定する Set 系関数のデフォルト値は " false " です。

■パーサー属性の取得

表 19.14. パーサーの属性を取得するための Get 系関数

SFXXMLDOMParser クラス SFXXMLSAXParser クラス 関数の解説
SFXXMLDOMParser::GetDoNamespaces SFXXMLSAXParser::GetDoNamespaces 名前空間を処理するかどうかを取得します。
SFXXMLDOMParser::GetDoSchema SFXXMLSAXParser::GetDoSchema スキーマを処理するかどうかを取得します。
SFXXMLDOMParser::GetValidationSchema SFXXMLSAXParser::GetValidationSchema XML 文書をスキーマで検証するかどうかを取得します。
SFXXMLDOMParser::GetLoadExternalDTD SFXXMLSAXParser::GetLoadExternalDTD DTD 付き XML 文書に関して、外部 DTD ファイルをロードするかどうかを取得します。
SFXXMLDOMParser::GetValidationDTD SFXXMLSAXParser::GetValidationDTD XML 文書を DTD で検証するかどうかを取得します。
SFXXMLDOMParser::GetCreateCommentNodes ------ Comment ノードを生成するかどうかを取得します。
SFXXMLDOMParser::GetDocument ------ DOM ツリーのルートノードを取得します。
SFXXMLDOMParser::GetDoIndent SFXXMLSAXParser::GetDoIndent インデント処理を行うかどうかを取得します。

■要素の取得

表 19.15. 要素を取得するための関数

SFXXMLDOMParser クラス 関数の解説
SFXXMLDOMParser::GetFirstChildElement 指定された要素名の最初の子 Element ノードを取得します。
SFXXMLDOMParser::GetFirstChildElementNS 指定されたローカル名と名前空間 URI を持つ最初の子 Element ノードを取得します。
SFXXMLDOMParser::GetNextSiblingElement 指定された Element ノードの次の兄弟 Element ノードを取得します。
SFXXMLDOMParser::GetNextSiblingElementNS 指定されたローカル名と名前空間 URI を持つ Element ノードの次の兄弟 Element ノードを取得します。
[Note] 注意

上記メンバ関数は、SFXXMLSAXParser クラスにはありません。

[Caution] SAX パーサー(SFXXMLSAXParser クラス)で解析する場合

XML 文書解析時に通知されるイベントを受信するハンドラを SFXXMLDefaultHandler クラスを継承するクラスにて実装する必要があります。

実装したクラスは SFXXMLSAXParser::SetDefaultHandler 関数を使用して、 SAX パーサー(SFXXMLSAXParser)に登録します。