前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXXMLNode
[XML] DOM ツリーのノードの基底クラスです。
#include <SFXXMLNode.hpp>
class SFXXMLNode;
SFMTYPEDEFCLASS(SFXXMLNode)

継承図

SFXXMLNode クラスの継承図

解説

SophiaFramework UNIVERSE では、 W3C(World Wide Web Consortium) で定義される 12 種類のノードに対応する、 以下の 12 のクラスを使用して DOM ツリーを構築して XML 文書を処理します。 これらのクラスは、すべて SFXXMLNode クラスを継承します。

表 227. ノードタイプ毎の nodeType / nodeName / nodeValue / attributes 属性

クラス名 ノードの種類 ノードタイプ(nodeType 属性) ノードの名前(nodeName 属性) ノードの値(nodeValue 属性) 属性(attributes 属性)
SFXXMLAttribute Attribute ノード ATTRIBUTE_NODE 属性名 属性値 null
SFXXMLCDATASection CDATASection ノード CDATA_SECTION_NODE "#cdata-section" CDATA セクションの内容 null
SFXXMLComment Comment ノード COMMENT_NODE "#comment" コメントの内容 null
SFXXMLDocument Document ノード DOCUMENT_NODE "#document" null null
SFXXMLDocumentFragment DocumentFragment ノード DOCUMENT_FRAGMENT_NODE "#document-fragment" null null
SFXXMLDocumentType DocumentType ノード DOCUMENT_TYPE_NODE 文書型名 null null
SFXXMLElement Element ノード ELEMENT_NODE タグ名 null 属性リスト(SFXXMLNode::DOMNamedNodeMap 型)
SFXXMLEntity Entity ノード ENTITY_NODE エンティティ名 エンティティ参照時の置換文字列 null
SFXXMLEntityReference EntityReference ノード ENTITY_REFERENCE_NODE 参照されるエンティティ名 null null
SFXXMLNotation Notation ノード NOTATION_NODE 記法の名前 null null
SFXXMLProcessingInstruction ProcessingInstruction ノード PROCESSING_INSTRUCTION_NODE ターゲット名("<?" から最初の空白文字までのトークン) 処理命令の内容(ターゲット名の後の最初の非空白文字から "?>" の直前の文字までの内容) null
SFXXMLText Text ノード TEXT_NODE "#text" テキストの内容 null
[Note] 注意
nodeType / nodeName / nodeValue 属性の値は、 SFXXMLNode::GetNodeType / SFXXMLNode::GetNodeName / SFXXMLNode::GetNodeValue 関数で取得できます。
[Note] 注意
attributes 属性の値は、 Element ノードに対してのみ有効で SFXXMLElement::GetAttributes などの関数で取得できます。

表 228. 文書ツリー(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

表 229. 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

参照

SFXXMLAttribute | SFXXMLCDATASection | SFXXMLComment | SFXXMLDocument | SFXXMLDocumentFragment | SFXXMLDocumentType | SFXXMLElement | SFXXMLEntity | SFXXMLEntityReference | SFXXMLNode | SFXXMLNotation | SFXXMLProcessingInstruction | SFXXMLText

メンバ

コンストラクタ/デストラクタ
SFXXMLNode( SFXXMLDocumentPtr owner )
SFXXMLNode クラスのコンストラクタです。
SFXXMLNode( Void )
SFXXMLNode クラスのコンストラクタです。
~SFXXMLNode( Void )
SFXXMLNode クラスのデストラクタです。
パブリック関数
SFCError AppendChild( SFXXMLNodeConstPtr newchild )
【無効】子ノードの最後にノードを追加します。
SFCError CloneNode( SFXXMLNodeHandle clonenode , Bool deep )
【無効】ノードのコピーを作成します。
Bool EqualNode( SFXXMLNodeConstPtr arg )
指定されたノードと同等かどうかを判定します。
DOMNodeListPtr GetChildNodes( Void )
【無効】すべての子ノードを取得します。
SFXXMLNodePtr GetFirstChild( Void )
【無効】最初の子ノードを取得します。
SFXXMLNodePtr GetLastChild( Void )
【無効】最後の子ノードを取得します。
SFXXMLNodePtr GetNextSibling( Void )
【無効】次の兄弟ノードを取得します。
ACharConstPtr GetNodeName( Void )
【無効】ノードの名前(nodeName 属性値)を取得します。
NodeType GetNodeType( Void )
【無効】ノードタイプ(nodeType 属性値)を取得します。
ACharConstPtr GetNodeValue( Void )
ノードの値(nodeValue 属性値)を取得します。
SFXXMLNodePtr GetParentNode( Void )
【無効】親ノードを取得します。
SFXXMLNodePtr GetPreviousSibling( Void )
【無効】前の兄弟ノードを取得します。
SFXAnsiString GetText( Void )
ノードテキストを取得します。
Bool HasChildNodes( Void )
【無効】子ノードを持つかどうかを判定します。
SFCError InsertBefore( SFXXMLNodeConstPtr newchild , SFXXMLNodeConstPtr refchild )
【無効】ノードを挿入します。
Bool IsSameNode( SFXXMLNodeConstPtr other )
指定されたノードと同一であるか判定します。
SFCError RemoveChild( SFXXMLNodeConstPtr oldchild )
【無効】子孫ノードも含めて子ノードを削除します。
SFCError ReplaceChild( SFXXMLNodeConstPtr newchild , SFXXMLNodeConstPtr oldchild )
【無効】子ノードを置換します。
Void SetNodeValue( ACharConstPtr value )
ノードの値(nodeValue 属性値)を設定します。
SFCError SetText( SFXAnsiStringConstRef text )
ノードテキストを設定します。
DOMNamedNodeMap
複数の DOM ノードを名前またはローカル名と名前空間 URI で管理するためのクラスです。
DOMNodeList
複数の DOM ノードをリスト形式で管理するためのクラスです。
NodeType
ノードタイプを表す定数です。

SFXXMLNode::SFXXMLNode
SFXXMLNode クラスのコンストラクタです。
[ public, explicit ]
SFXXMLNode(
    SFXXMLDocumentPtr owner   // このノードを所有する Document ノード
);
[ protected, explicit ]
SFXXMLNode(Void);

解説

このコンストラクタは、このノードを所有する Document ノード(SFXXMLDocument) を引数に指定して設定することが可能です。 これ以外は、何も行いません。

参照

SFXXMLDocument


SFXXMLNode::~SFXXMLNode
SFXXMLNode クラスのデストラクタです。
[ public, virtual ]
virtual ~SFXXMLNode(Void);

解説

このデストラクタは、何も行いません。


SFXXMLNode::AppendChild
【無効】子ノードの最後にノードを追加します。
[ public, virtual ]
SFCError AppendChild(
    SFXXMLNodeConstPtr newchild   // 追加するノード
);

戻り値

SFERR_UNSUPPORTED

解説

この関数は、SFERR_UNSUPPORTED を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている AppendChild 関数を呼び出してください。

参照

SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore


SFXXMLNode::CloneNode
【無効】ノードのコピーを作成します。
[ public, virtual ]
SFCError CloneNode(
    SFXXMLNodeHandle clonenode   // コピー先のノード( Handle 型 )
    Bool deep                    // 子ノードを再帰的にコピーするかどうか 
);

戻り値

SFERR_UNSUPPORTED

解説

この関数は、SFERR_UNSUPPORTED を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている CloneNode 関数を呼び出してください。

参照

SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::AppendChild | SFXXMLNode::InsertBefore


SFXXMLNode::EqualNode
指定されたノードと同等かどうかを判定します。
[ public, virtual, const ]
Bool EqualNode(
    SFXXMLNodeConstPtr arg   // 比較するノード
);

戻り値

  • 同等であるとき: true
  • そうでないとき: false

解説

この関数は、指定されたノードと同等かどうか(ノードの内容が同じであるかどうか)を判定します。

[Note] 2 つのノードが同等であるための条件

2 つのノードが同等であるための条件は、以下のように再帰的に定義されます。

  1. 2 つのノードが同じであること(SFXXMLNode::IsSameNode 関数の戻り値が true であるとき)
  2. 2 つのノードが同じでない(異なる)場合は、以下の条件をすべて満足すること
    • ノードタイプ(nodeType 属性値)が同じであること
    • ノードの名前(nodeName 属性値)が同じであること
    • ノードの値(nodeValue 属性値)が同じであること
    • (子ノードが存在するなら)子ノードの数が同じであり、かつ同じ位置にある子ノード同士が同等であること
  3. Attribute ノードの場合は、設定されているローカル名、名前空間 URI、名前空間接頭辞も同じであること
  4. DocumentType ノードの場合は、 設定されている外部サブセットの公開識別子とシステム識別子、 内部サブセット、記法、エンティティも同じであること
  5. Element ノードの場合は、 設定されているローカル名、名前空間 URI、名前空間接頭辞、属性も同じであること
[Note] 2 つのノードの同一性の判定

2 つのノードが同一であるかどうか(2 つのノードが同じオブジェクトを参照しているかどうか)の判定には、 SFXXMLNode::IsSameNode 関数を使用します。

参照

SFXXMLAttribute::EqualNode | SFXXMLDocumentType::EqualNode | SFXXMLElement::EqualNode | SFXXMLNode::IsSameNode


SFXXMLNode::GetChildNodes
【無効】すべての子ノードを取得します。
[ public, virtual, const ]
DOMNodeListPtr GetChildNodes(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetChildNodes 関数を呼び出してください。

参照

SFXXMLNode::DOMNodeList | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetNextSibling | SFXXMLNode::GetParentNode | SFXXMLNode::GetPreviousSibling


SFXXMLNode::GetFirstChild
【無効】最初の子ノードを取得します。
[ public, virtual, const ]
SFXXMLNodePtr GetFirstChild(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetFirstChild 関数を呼び出してください。

参照

SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetParentNode


SFXXMLNode::GetLastChild
【無効】最後の子ノードを取得します。
[ public, virtual, const ]
SFXXMLNodePtr GetLastChild(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetLastChild 関数を呼び出してください。

参照

SFXXMLNode::GetFirstChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetParentNode


SFXXMLNode::GetNextSibling
【無効】次の兄弟ノードを取得します。
[ public, virtual, const ]
SFXXMLNodePtr GetNextSibling(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetNextSibling 関数を呼び出してください。

参照

SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetParentNode


SFXXMLNode::GetNodeName
【無効】ノードの名前(nodeName 属性値)を取得します。
[ public, virtual, const ]
ACharConstPtr GetNodeName(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetNodeName 関数を呼び出してください。

参照

SFXXMLNode::DOMNamedNodeMap


SFXXMLNode::GetNodeType
【無効】ノードタイプ(nodeType 属性値)を取得します。
[ public, virtual, const ]
NodeType GetNodeType(Void);

戻り値

SFXXMLNode::UNKNOWN_NODE

解説

この関数は、SFXXMLNode::UNKNOWN_NODE を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetNodeType 関数を呼び出してください。

[Note] ノードタイプ

ノードタイプとは、ノードの種類によって内容が異なる nodeType 属性値のことです。

ノードタイプの値は、 W3C DOM レベル 1 勧告 (Document Object Model (DOM) Level 1 Specification ) の NodeType の一覧に記載されている数値と同じです。

整数値 ノードタイプ
1 ELEMENT_NODE
2 ATTRIBUTE_NODE
3 TEXT_NODE
4 CDATA_SECTION_NODE
5 ENTITY_REFERENCE_NODE
6 ENTITY_NODE
7 PROCESSING_INSTRUCTION_NODE
8 COMMENT_NODE
9 DOCUMENT_NODE
10 DOCUMENT_TYPE_NODE
11 DOCUMENT_FRAGMENT_NODE
12 NOTATION_NODE
-1 UNKNOWN_NODE

参照

SFXXMLNode::NodeType


SFXXMLNode::GetNodeValue
ノードの値(nodeValue 属性値)を取得します。
[ public, virtual, const ]
ACharConstPtr GetNodeValue(Void);

戻り値

null

解説

この関数は、null を返します。

参照

SFXXMLNode::SetNodeValue


SFXXMLNode::GetParentNode
【無効】親ノードを取得します。
[ public, virtual, const ]
SFXXMLNodePtr GetParentNode(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetParentNode 関数を呼び出してください。

参照

SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling


SFXXMLNode::GetPreviousSibling
【無効】前の兄弟ノードを取得します。
[ public, virtual, const ]
SFXXMLNodePtr GetPreviousSibling(Void);

戻り値

null

解説

この関数は、null を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている GetPreviousSibling 関数を呼び出してください。

参照

SFXXMLNode::GetNextSibling | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetParentNode


SFXXMLNode::GetText
ノードテキストを取得します。
[ public, const ]
SFXAnsiString GetText(Void);

戻り値

このノードのノードテキスト

解説

この関数は、このノードのノードテキストを返します。

ノードテキストは、以下のようにノードのタイプによって異なります。

ノードのタイプ ノードテキスト
Attribute, Element, Entity, EntityReference, DocumentFragment Comment ノードと Processing Instruction ノードを除く、すべての子ノードのノードテキストの連接(子ノードが存在しない場合、空の文字列)
Text, CDATASection, Comment, ProcessingInstruction nodeValue 属性値(GetNodeValue 関数の戻り値と同じ)
Document, DocumentType, Notation null
[Note] 注意

ノードテキストにはマークアップは含まれません。また、空白文字は正規化されません。

参照

SFXXMLNode::SetText


SFXXMLNode::HasChildNodes
【無効】子ノードを持つかどうかを判定します。
[ public, virtual, const ]
Bool HasChildNodes(Void);

戻り値

false

解説

この関数は、false を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている HasChildNodes 関数を呼び出してください。


SFXXMLNode::InsertBefore
【無効】ノードを挿入します。
[ public, virtual ]
SFCError InsertBefore(
    SFXXMLNodeConstPtr newchild   // 挿入するノード
    SFXXMLNodeConstPtr refchild   // 参照ノード、このノードの直前に挿入される
);

戻り値

SFERR_UNSUPPORTED

解説

この関数は、SFERR_UNSUPPORTED を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている InsertBefore 関数を呼び出してください。

参照

SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::AppendChild


SFXXMLNode::IsSameNode
指定されたノードと同一であるか判定します。
[ public, virtual, const ]
Bool IsSameNode(
    SFXXMLNodeConstPtr other   // 比較するノード
);

戻り値

  • 同一のとき: true
  • 異なるとき: false

解説

この関数は、このノードが指定されたノードと同一であるか判定します。

参照

SFXXMLNode::EqualNode


SFXXMLNode::RemoveChild
【無効】子孫ノードも含めて子ノードを削除します。
[ public, virtual ]
SFCError RemoveChild(
    SFXXMLNodeConstPtr oldchild   // 削除するノード
);

戻り値

SFERR_UNSUPPORTED

解説

この関数は、SFERR_UNSUPPORTED を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている RemoveChild 関数を呼び出してください。

参照

SFXXMLNode::AppendChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore


SFXXMLNode::ReplaceChild
【無効】子ノードを置換します。
[ public, virtual ]
SFCError ReplaceChild(
    SFXXMLNodeConstPtr newchild   // 置換後ノード
    SFXXMLNodeConstPtr oldchild   // 置換前ノード 
);

戻り値

SFERR_UNSUPPORTED

解説

この関数は、SFERR_UNSUPPORTED を返します。

[Note] 注意

この関数は無効です。 SFXXMLNode クラスを継承するクラスで実装されている ReplaceChild 関数を呼び出してください。

参照

SFXXMLNode::AppendChild | SFXXMLNode::RemoveChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore


SFXXMLNode::SetNodeValue
ノードの値(nodeValue 属性値)を設定します。
[ public, virtual ]
Void SetNodeValue(
    ACharConstPtr value   // ノードの値
);

解説

この関数は、何も行いません。

参照

SFXXMLNode::GetNodeValue


SFXXMLNode::SetText
ノードテキストを設定します。
[ public ]
SFCError SetText(
    SFXAnsiStringConstRef text   // 設定するノードテキスト
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、このノードに指定されたノードテキストを設定します。

この関数の動作は、以下のようにノードのタイプによって異なります。

ノードのタイプ SFXXMLNode::SetText 関数の動作
Attribute, Element, Entity, EntityReference, DocumentFragment 子ノードをすべて削除し、指定されたノードテキストを nodeValue 属性値として持つ Text ノードを子ノードとして追加します。
Text, CDATASection, Comment, ProcessingInstruction 指定されたノードテキストを引数にして SetNodeValue 関数を呼び出します。
Document, DocumentType, Notation 何も処理しません。

参照

SFXXMLNode::GetText


SFXXMLNode::DOMNamedNodeMap
複数の DOM ノードを名前またはローカル名と名前空間 URI で管理するためのクラスです。
[ public ]

SFMTYPEDEFCLASS(DOMNamedNodeMap)
class DOMNamedNodeMap {
    private:
        SFXXMLNodePtr           _ownerNode;
        DOMNodeList             _namenodelist;
    public:
        explicit                DOMNamedNodeMap         (Void);
                                ~DOMNamedNodeMap        (Void);
    public:        
        SInt32                  GetLength               (Void) const;
        SFXXMLNodePtr           Item                    (SInt32 index) const;
        SFXXMLNodePtr           GetNamedItem            (SFXAnsiStringConstRef name) const;
        SFCError                SetNamedItem            (SFXXMLNodeConstPtr arg);
        SFXXMLNodePtr           RemoveNamedItem         (SFXAnsiStringConstRef name);
        SFXXMLNodePtr           GetNamedItemNS          (SFXAnsiStringConstRef localname, SFXAnsiStringConstRef namespaceURI) const;
        SFCError                SetNamedItemNS          (SFXXMLNodeConstPtr arg);
        SFXXMLNodePtr           RemoveNamedItemNS       (SFXAnsiStringConstRef localname, SFXAnsiStringConstRef namespaceURI);
    protected:
        inline  Void            SetOwnerNode            (SFXXMLNodePtr node)
        {
             _ownerNode = node;
             return;
        }

    friend class SFXXMLElement;
    friend class SFXXMLDocumentType;
};

解説

このクラスは、 複数の DOM ノードを管理するためのクラスです。

このクラスでは、名前(nodeName 属性値)を指定してノードを操作することが可能です。 また、インデックスを指定してノードにアクセスすることも可能です(ノード間に順序関係はありません)。

SFXXMLNode::DOMNamedNodeMap クラスは、以下のメンバ関数を持ちます。

Item マップの index 番目の項目を返します。
GetLength マップのノード数を取得します。
Merge 指定されたマップの内容を併合します。
GetNamedItem 指定された名前(修飾名の場合もある)を持つノードを取得します。
RemoveNamedItem 指定された名前(修飾名の場合もある)を持つノードをマップから削除します。
SetNamedItem 指定されたノードをマップに追加します。 指定されたノードの名前(修飾名の場合もある)と同じ名前のノードがマップ内に存在する場合は、既存のノードは削除されます。
GetNamedItemNS 指定されたローカル名と名前空間 URI を持つノードを取得します。
RemoveNamedItemNS 指定されたローカル名と名前空間 URI を持つノードをマップから削除します。
SetNamedItemNS 指定されたノードをマップに追加します。 指定されたノードのローカル名と名前空間 URI を持つノードがマップ内に存在する場合は、既存のノードは削除されます。
[Note] 注意

上の表で、名前は nodeName 属性値(SFXXMLNode::GetNodeName 関数で取得できるノードの名前)を表します。

GetNamedItem / RemoveNamedItem / SetNamedItem 関数を使用して名前でノードにアクセスする場合、 名前空間が設定されていれば修飾名でアクセスする場合もあります。

ローカル名と名前空間 URI でノードにアクセスする場合は、 GetNamedItemNS / RemoveNamedItemNS / SetNamedItemNS 関数を使用します。

使用例

// 解析対象の XML 文書( apple.xml )
<fruit>
    <name made="japan" date="2007-06-20" size="XS">apple</name>
</fruit>

SFXXMLNode::DOMNamedNodeMap クラスを使ったサンプルコードです。

SFCError error;             // エラー値
SFXXMLDOMParser parser;     // DOM パーサー
SFXAnsiString resultString; // Attribute ノードの値を格納する変数

// XML 文書 "/apple.xml" を解析する
if ((error = parser.Parse("/apple.xml")) == SFERR_NO_ERROR) {

    // DOM ツリーのルートノードを取得する
    SFXXMLDocumentPtr root = parser.GetDocument();    

    // XML 文書のルート要素(DOM ツリーのルートノードの最初の子ノード。この場合、fruit 要素)を取得する
    SFXXMLNodePtr child = root->GetFirstChild(); 

    // fruit 要素の最初の子ノード ( name 要素 )を取得する
    child = child->GetFirstChild();  

    // name 要素のすべての Attribute ノードを取得する
    SFXXMLNode::DOMNamedNodeMapPtr nodeMap = SFXXMLElementPtr(child)->GetAttributes();

    // Attribute ノード数を表示する(マップのノード数を表示する)
    TRACE("%d",nodeMap->GetLength());   // "3" が表示される

    for (int i = 0; i < nodeMap->GetLength(); i++) {
        SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する
        resultString = node->GetNodeValue();   // マップの i 番目の項目(Attribute ノード)の値を取得する

        // 取得した項目(Attribute ノード)の値を表示する
        TRACE("%s",resultString.GetCString());
    }
    // name 要素のすべての属性値 "XS", "2007-06-20", "japan" が表示される
    
    // "date " という名前のノードを取得する
    SFXXMLAttributePtr date = static_cast<SFXXMLAttributePtr>(nodeMap->GetNamedItem( "date "));
    //  "date " という名前のノードの値を取得する
    resultString = date->GetNodeValue();
	
    // 取得した項目(Attribute ノード)の値を表示する
    TRACE("%s",resultString.GetCString());      // "2007-06-20" が表示される
    
    // "made" という名前のノードをマップから削除する
    SFXXMLNodePtr remove = nodeMap->RemoveNamedItem("made");
    // "made" という名前のノードを削除する
    ::delete remove;
	
    // Attribute ノード数を表示する(マップのノード数を表示する)
    TRACE("%d",nodeMap->GetLength());   // "2" が表示される
    
    for (int i = 0; i < nodeMap->GetLength(); i++) {
        SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する
        resultString = node->GetNodeValue();   // マップの i 番目の項目(Attribute ノード)の値を取得する

        // 取得した項目(Attribute ノード)の値を表示する
        TRACE("%s",resultString.GetCString());     
    }
    // name 要素のすべての属性値 "2007-06-20", "japan" が表示される
    
    // ノードをマップに追加する
    nodeMap->SetNamedItem(root->CreateAttribute("color", "red"));
    
    // Attribute ノード数を表示する(マップのノード数を表示する)
    TRACE("%d",nodeMap->GetLength());   // "3" が表示される
    
    for (int i = 0; i < nodeMap->GetLength(); i++) {
        SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する
        resultString = node->GetNodeValue();   // マップの i 番目の項目(Attribute ノード)の値を取得する

        // 取得した項目(Attribute ノード)の値を表示する
        TRACE("%s",resultString.GetCString());  
    }
    // name 要素のすべての属性値 "XS" "2007-06-20" "red"が表示される
}

参照

SFXXMLNode::DOMNodeList | SFXXMLNode::GetNodeName


SFXXMLNode::DOMNodeList
複数の DOM ノードをリスト形式で管理するためのクラスです。
SFMTYPEDEFALIAS(SFXList<SFXXMLNodePtr>, DOMNodeList)

解説

SFXList<SFXXMLNodePtr> の別名です。リストに格納されたノード間には順序関係があります。

使用例

// 解析対象の XML 文書( apple.xml )
<fruit>
  <name>apple</name>
  <size>XS</size>
  <color>red</color>
</fruit>
SFCError error;             // エラー値
SFXXMLDOMParser parser;     // DOM パーサー
SFXAnsiString resultString; // 要素のテキストを格納する変数

// XML 文書 "apple.xml" を解析する
if ((error = parser.Parse("/apple.xml")) == SFERR_NO_ERROR) {

    // DOM ツリーのルートノードを取得する
    SFXXMLDocumentPtr root = parser.GetDocument(); 

    // XML 文書のルート要素(DOM ツリーのルートノードの最初の子ノード。この場合、fruit 要素)を取得する
    SFXXMLNodePtr child = root->GetFirstChild();   

    // fruit 要素のすべての子要素(子ノード)を取得する
    SFXXMLNode::DOMNodeListPtr nodeList = child->GetChildNodes();

    // イテレータを取得する
    SFXXMLNode::DOMNodeList::Iterator itor = nodeList->GetFirstIterator();   
    
    // fruit 要素のすべての子ノードのテキストを表示する
    while (itor.HasNext()) {
        // name 要素、size 要素、color 要素の順に取得する
        SFXXMLNodePtr node = itor.GetNext();

        // ノードの名前を取得する
        resultString = node->GetNodeName();

        // ノードのテキストを取得する
        resultString = node->GetText();
        // ノードのテキストを表示する (例: name 要素の場合は "apple")
        TRACE("%s",resultString.GetCString()); 
    }
}

参照

SFXList | SFXXMLNode::DOMNamedNodeMap


SFXXMLNode::NodeType
ノードタイプを表す定数です。
enum NodeType {
    ELEMENT_NODE                = 1,
    ATTRIBUTE_NODE              = 2,
    TEXT_NODE                   = 3,
    CDATA_SECTION_NODE          = 4,
    ENTITY_REFERENCE_NODE       = 5,
    ENTITY_NODE                 = 6,
    PROCESSING_INSTRUCTION_NODE = 7,
    COMMENT_NODE                = 8,
    DOCUMENT_NODE               = 9,
    DOCUMENT_TYPE_NODE          = 10,
    DOCUMENT_FRAGMENT_NODE      = 11,
    NOTATION_NODE               = 12,
    UNKNOWN_NODE                = -1
};

解説

W3C DOM レベル 1 勧告 (Document Object Model Level 1 Specification) の NodeType の一覧に記載されている数値です。