2010-08-29 133 views
0

我正在使用libxml2来解析HTML。我想删除某些格式标记,如<center>,同时保留其内容(例如,链接)。libxml2 - 删除孩子,但不是孙子

这意味着我必须从我的xmlNodeSet中删除某些子节点,但保留该节点的子节点。

现在,我得到这个代码:

xmlNodePtr parentNode = nodes->nodeTab[i]; 

if (parentNode != NULL) { 
    xmlNodePtr child = parentNode->children; 
    xmlNodePtr parentNextSibling = parentNode->next; 
    xmlNodePtr grandParent = NULL; 

    while (child) { 
     xmlUnlinkNode(child); 
     if (parentNextSibling != NULL) { 
      xmlAddPrevSibling(parentNextSibling, child); 
     } 
     else { 
      if (grandParent == NULL) 
       grandParent = parentNode->parent; 
      xmlAddChild(grandParent, child); 
     } 

     child = child->next; 
    } 

    xmlUnlinkNode(parentNode); 
    xmlFree(parentNode); 
} 

,代码将孩子添加到文档,但它还会删除我将其添加为同级节点。我究竟做错了什么?

回答

1

在将它从树中剪下之前,您并没有保存孩子 - >下一个指针。只要你断开一个节点,它不是树的一部分,所以child-> next变成了NULL。然后,在将它重新插入到树中之前(parentNode-> next之前),child-> next指针现在指向之前的parentNode-> next,因此下一次通过循环时,您将删除parentNode-> next。事情只能从那里走下坡路。 :-)

相关问题