指定したタグ名を持つ、すべてのノードを取得する
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" } }