前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1

18.4. XML パーサー

18.4.1. DOM パーサーと SAX パーサー

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

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

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

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

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

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

18.4.2. SFXXMLDOMParser と SFXXMLSAXParser の基本機能

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

■ XML 文書の解析

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

SFXXMLDOMParser クラスの関数名 SFXXMLSAXParser クラスの関数名 解説
SFXXMLDOMParser::Parse SFXXMLSAXParser::Parse XML 文書を解析します。

■パーサー属性の設定

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

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

SFXXMLDOMParser::SetIgnoreAnnotations / SFXXMLSAXParser::SetIgnoreAnnotations 関数を除き、Set 関数のデフォルト値は " false " です。

■パーサー属性の取得

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

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

■要素の取得

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

SFXXMLDOMParser クラスの関数名 解説
SFXXMLDOMParser::GetFirstChildElement 指定した要素の最初の子要素を取得します。
SFXXMLDOMParser::GetFirstChildElementNS 指定した名前空間付き要素の最初の子要素を取得します。
SFXXMLDOMParser::GetNextSiblingElement 指定した要素の次の兄弟要素を取得します。
SFXXMLDOMParser::GetNextSiblingElementNS 指定した名前空間付き要素の次の兄弟要素を取得します。
[Note] 注意

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

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

XML 文書解析時に通知されるイベントを処理するハンドラを SFXXMLDefaultHandler クラスを継承するクラスにて実装する必要があります。 実装したクラスは SFXXMLSAXParser クラスに登録します。