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