tags:

views:

25

answers:

0

I'm using libxml2 to parse HTML. I want to remove certain formatting tags like <center>, while keeping their content (for example, a link).

This means I'll have to remove certain child nodes from my xmlNodeSet, but keep that node's children.

Right now, I got this code:

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);
}

The code does add the child to the document, but it also deletes the node I was adding it as a sibling to. What am I doing wrong?