On 12/28/2011 02:19 AM, John J. Boyer wrote: > I need to delete some nodes from a parse tree. So I use xmlUnlinkNode > and then xmlFree. However, when I output the tree with xmlDumpDoc the > nodes are still there. What am I missing?
It's difficult to say without seeing what you're doing exactly. Here's what works for me (sample program which deletes the first child element of the document root): xmlDocPtr pDoc = xmlParseFile(pczFileName); //error checking.... xmlNodePtr pRoot = xmlDocGetRootElement(pDoc); //error checking... xmlNodePtr pNext = pRoot->children; int iDeleted = 0; while (pNext) { if (pNext->type == XML_ELEMENT_NODE && !iDeleted) { xmlNodePtr pDelNode = pNext; pNext = pNext->next; xmlUnlinkNode(pDelNode); xmlFree(pDelNode); iDeleted = 1; } else { pNext = pNext->next; } } xmlChar *pxBuf; int iBufSize = 0; xmlDocDumpFormatMemory(pDoc, &pxBuf, &iBufSize, 1); fprintf(stdout, "Buffer out: %s\n", (const char*)pxBuf); The input file: $ cat t.xml <people_list> <person/> <person/> </people_list> Sample output: $ ./del t.xml Buffer out: <?xml version="1.0"?> <people_list> <person/> </people_list> Is that what you're doing in your application? All the best! Piotr _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org http://mail.gnome.org/mailman/listinfo/xml