2012-08-13 345 views
2

如何刪除具有特定屬性的子節點?我正在使用C++/libxml2。我嘗試到目前爲止(在這個例子我想與ID刪除子節點=「2」):Xpath如何通過屬性C++刪除子節點libxml2

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

調用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; 
    } 
} 
+0

謝謝,它正在工作! – user1432032 2012-08-13 23:49:49

0

沒有用的,而這個庫,但檢查出this method。請注意,根據說明,您需要先致電xmlUnlinkNode