Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoXml
    Variant vXml2
    Handle hoXml2
    Integer iIndex
    String sTemp1

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

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End
    Set ComTag Of hoXml To "x1"
    Send ComUpdateChildContent To hoXml "a1" "1"
    Send ComUpdateChildContent To hoXml "a2" "2"
    Send ComUpdateChildContent To hoXml "a3" "3"

    // Build a 2nd XML document:

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

    Get Create (RefClass(cComChilkatXml)) To hoXml2
    If (Not(IsComObjectCreated(hoXml2))) Begin
        Send CreateComObject of hoXml2
    End
    Set ComTag Of hoXml2 To "x2"
    Send ComUpdateChildContent To hoXml2 "b1" "11"
    Send ComUpdateChildContent To hoXml2 "b2" "22"
    Send ComUpdateChildContent To hoXml2 "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"

    Get ComTagIndex Of hoXml "a1" To iIndex
    If (iIndex < 0) Begin
        Showln "a1 not found."
        Procedure_Return
    End

    Get pvComObject of hoXml2 to vXml2
    Send ComInsertChildTreeAfter To hoXml iIndex vXml2

    Get ComGetXml Of hoXml To sTemp1
    Showln sTemp1

    // 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:
    Send ComUpdateChildContent To hoXml2 "b3" "33333333"

    Get ComGetXml Of hoXml To sTemp1
    Showln sTemp1

    // The result:

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


End_Procedure