複数の DOM ノードを名前で管理する
SFXXMLNode::DOMNamedNodeMap クラスを使って、複数の DOM ノードをリストで名前します。
解析対象の XML 文書(file.xml)<fruit> <name made="japan" date="2007-06-20"size="XS">apple</name> </fruit>SFXXMLNode::DOMNamedNodeMap クラスを使ったサンプルコード
SFCError error; // エラー値 SFXXMLDOMParser parser; // DOM パーサー SFXAnsiString resultString; // 結果を格納する文字列 // file.xml に保存した XML 文書を解析する if ((error = parser.Parse("/file.xml")) == SFERR_NO_ERROR) { // ルート要素を取得する SFXXMLDocumentPtr root = parser.GetDocument(); / ルート要素の最初の子要素 ( "fruit" 要素 ) を取得する SFXXMLNodePtr child = root->GetFirstChild(); // "fruit"要素の子要素 ( "name" 要素 )を取得する child = child->GetFirstChild(); // すべての Attribute ノードを取得し、名前で管理する SFXXMLNode::DOMNamedNodeMapPtr nodeMap = SFXXMLElementPtr(child)->GetAttributes(); // マップのノード数を表示する TRACE("%d",nodeMap->GetLength()); // 3 for (int i = 0; i < nodeMap->GetLength(); i++) { // マップの index 番目の項目を取得する SFXXMLNodePtr node = nodeMap->Item(i); // マップの index 番目の項目のノードの値を取得する resultString = node->GetNodeValue(); // 取得したノードの値を表示する TRACE("%s",resultString.GetCString()); // "XS" "2007-06-20" "japan" } / 名前により指定されたノード( "date " )を取得する SFXXMLAttributePtr date = static_cast<SFXXMLAttributePtr>(nodeMap->GetNamedItem( "date ")); // 名前により指定されたノード( "date " )の値を取得する resultString = date->GetNodeValue(); // 取得したノードの値を表示する TRACE("%s",resultString.GetCString()); // "2007-06-20" // 名前で指定したノード( "made" )を削除する SFXXMLNodePtr remove = nodeMap->RemoveNamedItem("made"); // ノード ポインターを削除する ::delete remove; // マップのノード数を表示する TRACE("%d",nodeMap->GetLength()); // 2 for (int i = 0; i < nodeMap->GetLength(); i++) { // マップの index 番目の項目を取得する SFXXMLNodePtr node = nodeMap->Item(i); // マップの index 番目の項目のノードの値を取得する resultString = node->GetNodeValue(); // 取得したノードの値を表示する TRACE("%s",resultString.GetCString()); // "XS" "2007-06-20" } // 特定のノードをその nodeName 属性を使って追加する nodeMap->SetNamedItem(root->CreateAttribute("color", "red")); // マップのノード数を表示する TRACE("%d",nodeMap->GetLength()); // 3 for (int i = 0; i < nodeMap->GetLength(); i++) { // マップの index 番目の項目を取得する SFXXMLNodePtr node = nodeMap->Item(i); // マップの index 番目の項目のノードの値を取得する resultString = node->GetNodeValue(); // 取得したノードの値を表示する TRACE("%s",resultString.GetCString()); // "XS" "2007-06-20" "red" } }