前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1
SFXXMLNode
[XML] DOM ツリーのノードを表す基底クラスです。
#include <SFXXMLNode.hpp>
class SFXXMLNode;
SFMTYPEDEFCLASS(SFXXMLNode)

継承図

SFXXMLNode クラスの継承図

解説

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

クラス名 ノードの種類 ノード タイプ ( 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 エンティティ名 Entity ノードの値 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 関数で取得できます。
[Note] Document Object Model ( DOM ) の仕様

W3C DOM レベル 1 勧告 : Document Object Model Level 1 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 )
ノードの名前を取得します。
NodeType GetNodeType( Void )
ノード タイプを取得します。
ACharConstPtr GetNodeValue( Void )
ノードの値を取得します。
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 )
ノードに値を設定します。
SFCError SetText( SFXAnsiStringConstRef text )
ノード テキストを設定します。
DOMNamedNodeMap
複数の DOM ノードを名前で管理するためのクラスです。
DOMNodeList
複数の DOM ノードをリスト形式で管理するためのクラスです。
NodeType
ノード タイプの数値です。

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

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

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

参照

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


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

戻り値

SFERR_UNSUPPORTED を返します。

参照

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


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

戻り値

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

解説

SFXXMLNode::EqualNode 関数は、ノードの同一性 ( ノードへの参照で同じであるかどうか ) ではなく、 ノードの同等性 ( ノードの内容が同じであるかどうか ) を判定します。

同一性の判定には SFXXMLNode::IsSameNode 関数を使います。

参照

SFXXMLNode::IsSameNode


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

戻り値

null を返します。

解説

すべての子ノードを SFXXMLNode::DOMNodeList 形式で取得します。

[Note] 注意
SFXXMLNode::DOMNodeList の各要素は、SFXXMLNode 型へのポインターです。

参照

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


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

戻り値

null を返します。

参照

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


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

戻り値

null を返します。

参照

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


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

戻り値

null を返します。

参照

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


SFXXMLNode::GetNodeName
ノードの名前を取得します。
[ public, virtual, const ]
ACharConstPtr GetNodeName(Void);

戻り値

null を返します。

解説

[Note] ノードの名前

ノードの名前とは nodeName 属性値のことです。ノード タイプによって内容が異なります。

( 例 ) Element ノードの場合は、タグの名前です。Text ノードの場合は、null です。


SFXXMLNode::GetNodeType
ノード タイプを取得します。
[ public, virtual, const ]
NodeType GetNodeType(Void);

戻り値

UNKNOWN_NODE を返します。

解説

[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
ノードの値を取得します。
[ public, virtual, const ]
ACharConstPtr GetNodeValue(Void);

戻り値

null を返します。

解説

[Note] ノードの値

ノードの値とは nodeValue 属性値のことです。ノード タイプによって内容が異なります。

( 例 ) Text ノードの場合は、ノードのテキストです。Element ノードの場合は、null です。

参照

SFXXMLNode::SetNodeValue


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

戻り値

null を返します。

解説

親ノードがない場合は、null を返します。( DOM ツリーに追加されていないノード、あるいは DOM ツリーから削除されたノード )

Attribute ノード、Document ノード、DocumentFragment ノード、Entity ノード、および Notation ノード以外のノードは、必ず親ノードを持ちます。

参照

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


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

戻り値

null を返します。

解説

前の兄弟ノードを取得します。前の兄弟ノードがないときは null を返します。

参照

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 GetNodeValue 関数の戻り値と同じです。( nodeValue 属性値を返します。)
Document, DocumentType, Notation null を返します。
[Note] 注意
ノード テキストにはマークアップは含まれません。また、空白文字は正規化されません。

参照

SFXXMLNode::SetText


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

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

戻り値

SFERR_UNSUPPORTED を返します。

参照

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


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

戻り値

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

解説

2 つのノードが同じノードを参照するかどうかを判定します。

参照

SFXXMLNode::EqualNode


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

戻り値

SFERR_UNSUPPORTED を返します。

使用例

// 最後の子ノードを取得する 
SFXXMLNodePtr publisher = book->GetLastChild();
// その子ノードを削除する     
book->RemoveChild(publisher);

参照

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


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

戻り値

SFERR_UNSUPPORTED を返します。

参照

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


SFXXMLNode::SetNodeValue
ノードに値を設定します。
[ 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 関数と同等です。( nodeValue 属性値として引数に指定したノード テキストを設定します )
Document, DocumentType, Notation 無効です。( 何も処理されません )

参照

SFXXMLNode::GetText


SFXXMLNode::DOMNamedNodeMap
複数の DOM ノードを名前で管理するためのクラスです。
[ public ]

SFMTYPEDEFCLASS(DOMNamedNodeMap)
class DOMNamedNodeMap {
    friend class SFXXMLElement;
    friend class SFXXMLDocumentType;
    private:
        SFXXMLNodePtr           _ownerNode;
        DOMNodeList             _namenodelist;
    public:
        explicit                DOMNamedNodeMap         (Void);
                                ~DOMNamedNodeMap        (Void);
    public:        
        SFXXMLNodePtr           Item                    (SInt32 index) const;
        SInt32                  GetLength               (Void) const;        
        SFXXMLNodePtr           GetNamedItem            (SFXAnsiStringConstRef name) const;
        Void                    Merge                   (DOMNamedNodeMapConstRef nodeMap);
        SFXXMLNodePtr           RemoveNamedItem         (SFXAnsiStringConstRef name);
        SFCError                SetNamedItem            (SFXXMLNodeConstPtr arg);        
    protected:
        inline  Void            SetOwnerNode            (SFXXMLNodePtr node) { _ownerNode = node; }
};

解説

複数の DOM ノードを管理するためのクラスです。名前(nodeName 属性値)でノードを取得できる機能を提供します。

SFXXMLNode::DOMNamedNodeMap クラスのインスタンスに格納されたノード間には順序関係はありませんが、インデックスを指定してノードにアクセスすることも可能です。

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

Item マップの index 番目の項目を返します。
GetLength マップのノード数を取得します。
GetNamedItem 指定した名前のノードを取得します。
Merge 指定したマップの内容を併合します。
RemoveNamedItem 指定した名前のノードをマップから削除します。
SetNamedItem ノードをマップに追加します。(ノードの名前がマップ内の既存のノードと重複する場合は、既存のノードは削除されます。)
[Note] 注意
上の表で、名前は nodeName 属性値( SFXXMLNode::GetNodeName 関数で取得できるノードの名前 )を表します。

使用例

// 解析対象の 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::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()); 
    }
}

参照

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 の一覧に記載されている数値です。