Sample code for 30+ languages & platforms
C

Insert XML into existing XML by calling InsertChildTreeAfter

See more XML Examples

Demonstrates how to insert an XML tree or subtree into another XML document using the InsertChildTreeAfter method.

Chilkat C Downloads

C
#include <C_CkXml.h>

void ChilkatSample(void)
    {
    HCkXml xml;
    HCkXml xml2;
    int index;

    // Build the 1st XML document:
    // <x1>
    //     <a1>1</a1>
    //     <a2>2</a2>
    //     <a3>3</a3>
    // </x1>

    xml = CkXml_Create();
    CkXml_putTag(xml,"x1");
    CkXml_UpdateChildContent(xml,"a1","1");
    CkXml_UpdateChildContent(xml,"a2","2");
    CkXml_UpdateChildContent(xml,"a3","3");

    // Build a 2nd XML document:

    // <x2>
    //   <b1>11</b1>
    //   <b2>22</b2>
    //   <b3>33</b3>
    // </x2>

    xml2 = CkXml_Create();
    CkXml_putTag(xml2,"x2");
    CkXml_UpdateChildContent(xml2,"b1","11");
    CkXml_UpdateChildContent(xml2,"b2","22");
    CkXml_UpdateChildContent(xml2,"b3","33");

    // We want to insert xml2 into xml to get this:

    // <x1>
    //     <a1>1</a1>
    //     <x2>
    //         <b1>11</b1>
    //         <b2>22</b2>
    //         <b3>33</b3>
    //     </x2>
    //     <a2>2</a2>
    //     <a3>3</a3>
    // </x1>

    // Insert xml2 after "a1"

    index = CkXml_TagIndex(xml,"a1");
    if (index < 0) {
        printf("a1 not found.\n");
        CkXml_Dispose(xml);
        CkXml_Dispose(xml2);
        return;
    }

    CkXml_InsertChildTreeAfter(xml,index,xml2);

    printf("%s\n",CkXml_getXml(xml));

    // The result is:

    // <x1>
    //     <a1>1</a1>
    //     <x2>
    //         <b1>11</b1>
    //         <b2>22</b2>
    //         <b3>33</b3>
    //     </x2>
    //     <a2>2</a2>
    //     <a3>3</a3>
    // </x1>

    // Note: xml2 now points to the subtree within xml.
    // For example, update "b3" and then see how it's updated within the merged document:
    CkXml_UpdateChildContent(xml2,"b3","33333333");

    printf("%s\n",CkXml_getXml(xml));

    // The result:

    // <x1>
    //     <a1>1</a1>
    //     <x2>
    //         <b1>11</b1>
    //         <b2>22</b2>
    //         <b3>33333333</b3>
    //     </x2>
    //     <a2>2</a2>
    //     <a3>3</a3>
    // </x1>


    CkXml_Dispose(xml);
    CkXml_Dispose(xml2);

    }