我正在使用libxml2来解析HTML。我想删除某些格式标记,例如<center>
,同时保留其内容(例如,链接)。
这意味着我必须从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);
}
代码确实将子项添加到文档中,但它也删除了我将其作为兄弟添加到的节点。我做错了什么?
答案 0 :(得分:1)
在将它从树中剪切掉之前,你没有保存孩子 - >下一个指针。一旦取消链接节点,它就不是树的一部分,所以child-&gt; next变为NULL。然后,在您将其重新插入树中之后(在parentNode-&gt; next之前),child-&gt; next指针现在指向之前的parentNode-&gt; next,所以下次循环时,删除parentNode-&gt ;下一个。事情只能从那里走下坡路。 : - )