Sample code for 30+ languages & platforms
DataFlex

XML Document References

See more XML Examples

This example demonstrates the fact that the entire XML document remains in memory if at least one node is referenced. (It does not need to be the root node.)

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoXml
    Variant vXB
    Handle hoXB
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End

    Get ComLoadXml Of hoXml "<a><b>BBB</b><c>CCC</c></a>" To iSuccess

    Get ComGetXml Of hoXml To sTemp1
    Showln sTemp1

    // We have the following XML stored in memory:

    // 	<?xml version="1.0" encoding="utf-8"?>
    // 	<a>
    // 	    <b>BBB</b>
    // 	    <c>CCC</c>
    // 	</a>

    // Get a reference to the 1st child.
    Get ComGetChild Of hoXml 0 To vXB
    If (IsComObject(vXB)) Begin
        Get Create (RefClass(cComChilkatXml)) To hoXB
        Set pvComObject Of hoXB To vXB
    End

    // Re-load "xml" with an entirely new document:
    Get ComLoadXml Of hoXml "<z><x>XXX</x></z>" To iSuccess

    // What happens to xB?
    // The answer is nothing.  xB still points ot the "b" node in the original document, and the entire
    // original document remains in memory.  We now have two XML documents in memory.

    Get ComGetXml Of hoXB To sTemp1
    Showln sTemp1

    // output is:

    //     <b>BBB</b>

    // Make xB reference the root node of its document:
    Send ComGetRoot2 To hoXB
    Get ComGetXml Of hoXB To sTemp1
    Showln sTemp1

    // You can see here that the entire original XML document is still available
    // because at least one node in the XML is referenced by a variable.
    // The output is:

    //     <?xml version="1.0" encoding="utf-8"?>
    //     <a>
    //         <b>BBB</b>
    //         <c>CCC</c>
    //     </a>

    // We can also see that "xml" contains an entirely new XML document:
    Get ComGetXml Of hoXml To sTemp1
    Showln sTemp1

    //     <?xml version="1.0" encoding="utf-8"?>
    //     <z>
    //         <x>XXX</x>
    //     </z>
    // 

    Send Destroy of hoXB


End_Procedure