2010-08-29 128 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。事情只能從那裏走下坡路。 :-)