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

19.3. XML 文書の作成

19.3.1. DOM ツリーの構築と保存

SFXXMLDocument クラスは、DOM ツリーをメモリ上に構築し、 XML 文書として保存するためのクラスです。

SFXXMLDocument オブジェクトは、DOM ツリーのルートノードとなります。

ルートノード(SFXXMLDocument オブジェクト)は、 DOM ツリーの頂点に位置するノードであり、DOM ツリー内のすべてのノードを管理します。

DOM ツリーの各種ノード(SFXXMLNode オブジェクト)は、 以下の表にあるように SFXXMLDocument クラスの関数を使用して作成します。 そして、DOM ツリーの他のノードの子ノードに設定することにより、DOM ツリーを構築します。

関数名 引数 戻り値 解説
SFXXMLDocument::CreateElement 要素名 Element ノード(SFXXMLElement 要素名を指定して Element ノードを作成する
SFXXMLDocument::CreateElementNS 要素名(修飾名)、名前空間 URI Element ノード(SFXXMLElement 要素名(修飾名)と名前空間 URI を指定して Element ノードを作成する
SFXXMLDocument::CreateAttribute 属性名 Attribute ノード(SFXXMLAttribute 属性名を指定して Attribute ノードを作成する
SFXXMLDocument::CreateAttributeNS 属性名(修飾名)、名前空間 URI Attribute ノード(SFXXMLAttribute 属性名(修飾名)と名前空間 URI を指定して Attribute ノードを作成する
SFXXMLDocument::CreateTextNode テキスト Text ノード(SFXXMLText 指定されたテキストを持つ Text ノードを作成する
SFXXMLDocument::CreateComment コメントの内容 Comment ノード(SFXXMLComment 指定されたコメントの内容を持つ Comment ノードを作成する
SFXXMLDocument::CreateCDATASection CDATASection の内容 CDATASection ノード(SFXXMLCDATASection 指定された CDATASection の内容を持つ CDATASection ノードを作成する
SFXXMLDocument::CreateEntity エンティティ名 Entity ノード(SFXXMLEntity 指定されたエンティティ名を持つ Entity ノードを作成する
SFXXMLDocument::CreateEntityReference 参照するエンティティ名 EntityReference ノード(SFXXMLEntityReference 指定された参照するエンティティ名を持つ EntityReference ノードを作成する
SFXXMLDocument::CreateDocumentType 文書型名、公開識別子、システム識別子 DocumentType ノード(SFXXMLDocumentType 指定された文書型名、公開識別子、システム識別子を持つ DocumentType ノードを作成する
SFXXMLDocument::CreateNotation 記法名 Notation ノード(SFXXMLNotation 指定された記法名を持つ Notation ノードを作成する
SFXXMLDocument::CreateProcessingInstruction ターゲット名、処理命令の内容 ProcessingInstruction ノード(SFXXMLProcessingInstruction 指定されたターゲット名、処理命令の内容を持つ ProcessingInstruction ノードを作成する
SFXXMLDocument::CreateDocumentFragment 無し DocumentFragment ノード(SFXXMLDocumentFragment 空の DocumentFragment ノードを作成する

SFXXMLDocument::Save 関数を呼び出すことにより、 DOM ツリーを XML 文書としてファイルに保存することが可能です。

例 19.1. DOM ツリーを構築するコード

SFXXMLElementPtr element=document.CreateElement("new_node");//新しい Element ノードを作る

document.AppendChild(element);// 指定された位置に Element ノードを追加する

19.3.2. 名前空間の処理

名前空間関係の関数は、SFXXMLDocument / SFXXMLNode::DOMNamedNodeMap / SFXXMLElement クラスに存在します。

以下の表は、名前空間関係の関数の一覧です (名前空間関係の関数はすべて関数名の末尾が"NS"で終わります)。

表 19.8. SFXXMLDocument クラス

関数名 解説
SFXXMLDocument::CreateElementNS 名前空間付きの Element ノードを作成します。
SFXXMLDocument::CreateAttributeNS 名前空間付きの Attribute ノードを作成します。
SFXXMLDocument::GetElementsByTagNameNS 指定したローカル名と名前空間 URI を持つ Element ノードのリストを取得します。

表 19.9. SFXXMLNode::DOMNamedNodeMap クラス

関数名 解説
GetNamedItemNS 指定したローカル名と名前空間 URI を持つノードを取得します。
RemoveNamedItemNS 指定したローカル名と名前空間 URI を持つノードを削除します。
SetNamedItemNS 名前空間付きのノードを追加します。

表 19.10. SFXXMLElement クラス

関数名 解説
SFXXMLElement::GetElementsByTagNameNS 指定したローカル名と名前空間 URI を持つ Element ノードのリストを取得します。
SFXXMLElement::GetAttributeNS 指定したローカル名と名前空間 URI を持つ属性の値を取得します。
SFXXMLElement::SetAttributeNS 名前空間で修飾された属性を追加します。
SFXXMLElement::RemoveAttributeNS 指定したローカル名と名前空間 URI を持つ属性を削除します。
SFXXMLElement::GetAttributeNodeNS 指定したローカル名と名前空間 URI を持つ Attribute ノードを取得します。
SFXXMLElement::SetAttributeNodeNS 名前空間で修飾された Attribute ノードを追加します。
SFXXMLElement::HasAttributeNS 指定したローカル名と名前空間 URI を持つ属性が存在するか判定します。

SFXXMLDocument::CreateElementNS / SFXXMLDocument::CreateAttributeNS 関数は、 名前空間付き Element / Attribute ノードを作成するための関数です。

名前空間付き Element / Attribute ノードを作成するには、 引数に修飾名("名前空間接頭辞:ローカル名")と名前空間 URI を指定して SFXXMLDocument::CreateElementNS / SFXXMLDocument::CreateAttributeNS 関数を呼び出します。

CreateElementNS 関数で Element ノードを作成した場合、 [xmlns:"prefix" = "名前空間 URI"] という属性(Attribute ノード)が Element ノードに自動的に設定されます。

以上の操作により、 Element / Attribute ノードは名前空間 URI とそれに対応した名前空間接頭辞を保持するため、 ローカル名と名前空間 URI で名前空間付き Element / Attribute ノードにアクセスすることが可能になります。

名前空間付きの Element / Attribute ノードでは、 GetNamespaceURI / GetPrefix / GetLocalName 関数により、 名前空間 URI / 名前空間接頭辞 / ローカル名を取得できます。 GetName / GetNodeName 関数を呼び出すと、修飾名を取得できます。

[Note] 修飾名 / 名前空間接頭辞 / ローカル名 / 名前空間 URI

修飾名(Qname)は、":" を挟んで左側にある名前空間接頭辞(prefix)と右側にあるローカル名(localname)から構成されます。 名前空間接頭辞(prefix)は、名前空間 URI (namespaceURI)に関連付けられています。

SFXXMLDocument::GetElementsByTagNameNS / SFXXMLElement::GetElementsByTagNameNS 関数は、 ローカル名と名前空間 URI を指定することにより名前空間付き Element ノードを検索するための関数です。

[Note] XML パーサーで名前空間を処理する方法

XML パーサーでは、 SFXXMLDOMParser::SetDoNamespaces / SFXXMLSAXParser::SetDoNamespaces 関数で true を指定することにより名前空間を処理できます。

この設定を行えば、 XML パーサーによる解析後の DOM ツリー内の各 Element / Attribute ノードには、 名前空間 URI、名前空間接頭辞、ローカル名が設定されます。