2

特定の属性を持つ子を削除するにはどうすればよいですか?私はc++/libxml2を使用しています。これまでの私の試み(この例では、id = "2"の子ノードを削除したい):

Given XML:
<p>
   <parent> <--- current context
       <child id="1" />
       <child id="2" />
       <child id="3" />
   </parent>
</p>

xmlNodePtr p = (parent node)// Parent node, in my example "current context"
xmlChar* attribute = (xmlChar*)"id";
xmlChar* attribute_value = (xmlChar*)"2";
xmlChar* xml_str;

for(p=p->children; p!=NULL; p=p->next){
  xml_str = xmlGetProp(p, attribute);
  if(xml_str == attribute_value){
     // Remove this node
   }
}
xmlFree(xml_str);
4

2 に答える 2

5

xmlUnlinkNodeノードを削除するために呼び出します。必要に応じて、後でそれを解放するために呼び出しxmlFreeNodeます。

for (p = p->children; p; ) {
  // Use xmlStrEqual instead of operator== to avoid comparing literal addresses
  if (xmlStrEqual(xml_str, attribute_value)) {
    xmlNodePtr node = p;
    p = p->next;
    xmlUnlinkNode(node);
    xmlFreeNode(node);
  } else {
    p = p->next;
  }
}
于 2012-08-13T23:11:26.827 に答える
0

しばらくこのライブラリを使用していませんが、このメソッドを確認してください。xmlUnlinkNode説明に従って、最初に呼び出す必要があることに注意してください。

于 2012-08-13T23:06:00.337 に答える