Hello,

I'm new to using libxml2 and I'm trying to perform the following procedure:

  1.  Create a new doc tree and assign a root node
  2.  Read an existing XML file into a tree (i.e. 'subtree')
  3.  Move the subtree under the root node of the tree I created
  4.  Save the new doc tree to an XML file
  5.  Free the new doc tree (crashes here)

Everything seems to work until Step 5 when I free the document and it causes my 
process to crash.  The generated output XML file (step 4) looks good however.  
Here's a simplified sample of my code:

void RunXml(void)
{
    xmlDocPtr    rootDoc = NULL,    subDoc = NULL;
    xmlNodePtr rootNode = NULL, subRootNode = NULL;

     /* Creates a new XML document, a new node, and sets it as a root node */
    rootDoc = xmlNewDoc(BAD_CAST "1.0");
    rootNode = xmlNewNode(NULL, BAD_CAST "rootElement");
    xmlDocSetRootElement(rootDoc, rootNode);

    /* Read the subtree into a new doc */
    subDoc = xmlReadFile("/tmp/subtree.xml", NULL, 0);

    /* Get the subtree root node */
    subRootNode = xmlDocGetRootElement(subDoc);

    /* Unlink the sub-root node from the sub doc */
    xmlUnlinkNode(subRootNode);

    /* Add the sub root node into the root tree */
    xmlAddChild(rootNode, subRootNode);

    /* Save the tree to a file */
    xmlSaveFormatFileEnc("/tmp/outfile.xml", rootDoc, "UTF-8", 1);

    /* Free the root doc */
    if (rootDoc != NULL) {
        xmlFreeDoc(rootDoc);  /* <--- Crashes here */
    }

}

I've also tried minor adjustments such as creating a new temporary node using 
xmlNewChild() under the rootNode, and then calling xmlReplaceNode() to swap out 
the temp node with the subRootNode without luck.  Any ideas/suggestions of what 
I'm doing incorrectly?

Thanks
Jordan
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to