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

19.2. DOM ツリー

19.2.1. DOM ツリーの構成

DOM ツリーは、 W3C ( World Wide Web Consortium ) で定義される 12 種類のノードから構成され、 それぞれに対応する SophiaFramework UNIVERSE のクラスは以下の通りです。

表 19.1. XML ノード クラス

クラス名 解説 ノードタイプ ( SFXXMLNode::NodeType )
SFXXMLNode 12 種類のノード クラスの基底クラスです。 -
SFXXMLElement Element ノードを表すクラスです。 ELEMENT_NODE
SFXXMLAttribute Attribute ノードを表すクラスです。 ATTRIBUTE_NODE
SFXXMLText Text ノードを表すクラスです。 TEXT_NODE
SFXXMLCDATASection CDATASection ノードを表すクラスです。 CDATA_SECTION_NODE
SFXXMLEntityReference Entity Reference ノードを表すクラスです。 ENTITY_REFERENCE_NODE
SFXXMLEntity Entity ノードを表すクラスです。 ENTITY_NODE
SFXXMLProcessingInstruction Processing Instruction ノードを表すクラスです。 PROCESSING_INSTRUCTION_NODE
SFXXMLComment Comment ノードを表すクラスです。 COMMENT_NODE
SFXXMLDocument Document ノードを表すクラスです。 DOCUMENT_NODE
SFXXMLDocumentType DocumentType ノードを表すクラスです。 DOCUMENT_TYPE_NODE
SFXXMLDocumentFragment DocumentFragment ノードを表すクラスです。 DOCUMENT_FRAGMENT_NODE
SFXXMLNotation Notation ノードを表すクラスです。 NOTATION_NODE
[Note] 注意

12 種類のノードを表す各クラスは、すべて SFXXMLNode クラスを継承します。

図 19.1. SFXXMLNode クラスの継承関係

SFXXMLNode クラスの継承関係

DOM ツリーは、ルートのノードの種類に応じて以下の表のように分類することができます。

各ノードは、子ノードとして持てるノードの種類が以下のように決まっています。

表 19.2. 文書ツリー(Document ノードをルートとする DOM ツリー)の構成要素

ノードの種類 子になれるノードの種類
Document Element(最大 1 つ)/ ProcessingInstruction / Comment / DocumentType(最大 1 つ)
Element Element / ProcessingInstruction / Text / Comment / CDATASection / EntityReference
ProcessingInstruction 子ノードを持たない
Comment 子ノードを持たない
DocumentType 子ノードを持たない
Text 子ノードを持たない
CDATASection 子ノードを持たない
EntityReference Element / ProcessingInstruction / Text / Comment / CDATASection / EntityReference
[Note] 注意

XML 文書は、XML パーサーにより Document ノードをルートとする DOM ツリーに展開されます。

表 19.3. DOM ツリーを構成するノード(Document ノード以外)

ノードの種類 子になれるノードの種類
DocumentFragment Element / ProcessingInstruction / Text / Comment / CDATASection / EntityReference
Attribute Text / EntityReference
Entity Element / ProcessingInstruction / Text / Comment / CDATASection / EntityReference
Notation 子ノードを持たない
[Note] DocumentFragment

DocumentFragment とは、 DOM ツリーを操作する際の一時的な作業用サブツリーを作成するための「軽量 (最小限度)」 の Document オブジェクトです。 文書ツリーのあるノードに DocumentFragment ノードを挿入するとき、 実際に挿入されるのは DocumentFragment ノードではなく、DocumentFragment ノードの子が挿入されることに注意してください。

[Note] DOM(Document Object Model)の仕様

W3C DOM レベル 2 コア仕様 : Document Object Model (DOM) Level 2 Core Specification

19.2.2. SFXXMLNode クラスの基本機能

SFXXMLNode クラスの基本機能として、以下の関数が用意されています。

表 19.4. DOM ツリーを操作するための関数

関数名 解説
GetFirstChild 最初の子ノードを取得します。
GetLastChild 最後の子ノードを取得します。
GetNextSibling 次の兄弟ノードを取得します。
GetPreviousSibling 前の兄弟ノードを取得します。
GetParentNode 親ノードを取得します。

表 19.5. DOM ツリーを構築するための関数

関数名 解説
AppendChild 子ノードの最後にノードを追加します。
RemoveChild 子孫ノードも含めて子ノードを削除します。
ReplaceChild 子ノードを置換します。
InsertBefore 指定されたノードの前にノードを挿入します。
CloneNode ノードのコピーを作成します。

表 19.6. ノードの属性を設定・取得するための関数

関数名 解説
HasChildNodes 子ノードを持つかどうかを判定します。
GetChildNodes すべての子ノードの取得します。
GetNodeType ノードタイプを取得します。
GetNodeName ノード名を取得します。
SetNodeValue ノード内容を更新します。
GetText ノードのテキストを取得します。
SetText ノードにテキストを設定します。

表 19.7. ノードを比較するための関数

関数名 解説
IsSameNode 2 つのノードが同一であるかどうかを判定します。
EqualNode 2 つのノードが同等であるかどうかを判定します。

19.2.3. XML 文書の処理

XML パーサーは、DTD または XMLスキーマの文法により検証された XML 文書を、 ツリー構造(DOM ツリー)としてメモリ上に展開してアプリケーションに渡します。

図 19.2. XML 文書の処理フロー

XML 文書の処理フロー

実際のアプリケーションでは、 XML パーサー(SFXXMLDOMParser)を呼んで XML 文書を解析し、 作成された DOM ツリーのルートノード(SFXXMLDocument オブジェクト)を取得します。

図 19.3. シーケンス図

シーケンス図
[Note] SFXXMLScanner

SFXXMLScanner は、 XML パーサーが内部的に使用するクラスです。

図 19.4. SFXXMLDocument

SFXXMLDocument

SFXXMLDocument クラスの機能

  1. DOM ツリーの構築
  2. DOM ツリーの保存
  3. DOM ツリーの操作
[Note] 注意

XML パーサーの処理では、 DOM ツリーのルートノード(SFXXMLDocument オブジェクト)が最も重要な役割を果たします。