gpt4 book ai didi

html - libxml2 - 删除子项,但不删除孙子

转载 作者:行者123 更新时间:2023-11-30 16:03:59 24 4
gpt4 key购买 nike

我正在使用 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);
}

代码确实将子节点添加到文档中,但它也删除了我将其添加为同级节点的节点。我做错了什么?

最佳答案

在将 child->next 指针从树中删除之前,您并没有保存它。一旦取消链接节点,它就不再是树的一部分,因此 child->next 变为 NULL。然后,在将其重新插入树中(在parentNode->next之前)后,child->next指针现在指向之前的parentNode->next,因此下次循环时,您将删除parentNode->next。事情只能从那里开始走下坡路。 :-)

关于html - libxml2 - 删除子项,但不删除孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3593919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com