ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

指定したタグ名を持つ、すべてのノードを取得する

SFXXMLElement::GetElementsByTagName メソッドを使って指定したタグ名を持つ、すべてのノードを取得します。

解析対象の XML 文書( file.xml )
<fruits>
    <fruit>
        <name>apple</name>
        <size>XS</size>
        <color>red</color>
    </fruit>
    <fruit>
        <name>banana</name>
        <size>S</size>
        <color>yellow</color>
    </fruit>
    <fruit>
        <name>melon</name>
        <size>XS</size>
        <color>green</color>
    </fruit>
</fruits>
サンプルコード
SFCError error;             // エラー値
SFXXMLDOMParser parser;     // DOM パーサー
SFXAnsiString resultString; // 結果を格納する文字列

// file.xml に保存した XML 文書を解析する
if ((error = parser.Parse("/file.xml")) == SFERR_NO_ERROR) {
    // ルート要素を取得する
    SFXXMLDocumentPtr root = parser.GetDocument(); 
    // ルート要素の最初の子要素 ( "fruits" 要素 ) を取得する
    SFXXMLNodePtr child = root->GetFirstChild();  
    // 要素 ( "fruit" 要素 ) を取得する
    SFXXMLNodePtr node = child->GetFirstChild();

    // "fruit" 要素のすべての子要素を取得する
    // SFXXMLNode::DOMNodeListPtr は SFXList<SFXXMLNodePtr> と同じ
    SFXXMLNode::DOMNodeListPtr nodeList = node ->GetChildNodes();
    // イテレータを取得する
    SFXXMLNode::DOMNodeList::Iterator itor = nodeList->GetFirstIterator();   
    // color 要素を持つ全要素を取得する
    nodeList = static_cast<SFXXMLElementPtr>(child)->GetElementsByTagName("color"); 
    // イテレータを取得する
    itor = nodeList->GetFirstIterator(); 

    while (itor.HasNext()) { // 次の要素があるかぎり繰り返す
        // 次の要素を取得する
        SFXXMLNodePtr node = itor.GetNext();     
        // 要素のテキストを取得する
        resultString = node->GetText();      
        // 要素のテキストを表示する
        TRACE("%s",resultString.GetCString());  // "red" "yellow" "green"
    }
}