PureBasic
PureBasic
Removing / Deleting Child Nodes from XML
See more XML Examples
Demonstrates various methods for removing child nodes from an XML document.The input XML, available at http://www.chilkatsoft.com/data/fruit.xml, is this:
<root>
<fruit color="red">apple</fruit>
<fruit color="green">pear</fruit>
<veg color="orange">carrot</veg>
<meat animal="cow">beef</meat>
<xyz>
<fruit color="blue">blueberry</fruit>
<veg color="green">broccoli</veg>
</xyz>
<fruit color="purple">grape</fruit>
<cheese color="yellow">cheddar</cheese>
</root>
Chilkat PureBasic Downloads
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 0
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
xyz.i
; The sample input XML is available at http://www.chilkatsoft.com/data/fruit.xml
success = CkXml::ckLoadXmlFile(xml,"fruit.xml")
If success <> 1
Debug CkXml::ckLastErrorText(xml)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
; The RemoveChild method removes (discards) all direct
; children having the specified tag:
CkXml::ckRemoveChild(xml,"fruit")
; Show the resulting XML:
Debug "Result with all direct children having a tag equal to " + Chr(34) + "fruit" + Chr(34) + " removed:"
Debug CkXml::ckGetXml(xml)
; The XML with the "fruit" direct children removed is shown below:
; Notice that the "fruit" node beneath "xyz" was not removed.
; This correct because it was not a direct child of the calling node.
; <root>
; <veg color="orange">carrot</veg>
; <meat animal="cow">beef</meat>
; <xyz>
; <fruit color="blue">blueberry</fruit>
; <veg color="green">broccoli</veg>
; </xyz>
; <cheese color="yellow">cheddar</cheese>
; </root>
; --------------------------------------------------------------------------
; Restore the original XML:
success = CkXml::ckLoadXmlFile(xml,"fruit.xml")
; The RemoveChildWithContent method removes the child
; having the exact content specified, regardless of the tag.
; For example:
CkXml::ckRemoveChildWithContent(xml,"pear")
; Show the resulting XML:
Debug "Result with the node containing " + Chr(34) + "pear" + Chr(34) + " removed:"
Debug CkXml::ckGetXml(xml)
; --------------------------------------------------------------------------
; Restore the original XML:
success = CkXml::ckLoadXmlFile(xml,"fruit.xml")
; The RemoveChildByIndex method removes the Nth direct
; child. Indexing begins at 0. The "xyz" child is at index 4:
CkXml::ckRemoveChildByIndex(xml,4)
; Show the resulting XML:
; Notice that the entire "xyz" subtree is removed.
Debug "Result with the node at index 4 removed:"
Debug CkXml::ckGetXml(xml)
; --------------------------------------------------------------------------
; Restore the original XML:
success = CkXml::ckLoadXmlFile(xml,"fruit.xml")
; Navigate to the node with tag "xyz"
xyz = CkXml::ckFindChild(xml,"xyz")
; Remove the "xyz" subtree making it it's own XML document
; with the "xyz" node at the root:
CkXml::ckRemoveFromTree(xyz)
; Show both XML documents:
Debug CkXml::ckGetXml(xyz)
Debug CkXml::ckGetXml(xml)
; Also, the TreeId property is an integer value assigned
; to nodes in an XML document. All nodes belonging to
; the same XML document will have the same TreeId.
; Notice that the "xyz" node now has a different TreeId:
Debug "xyz TreeId = " + Str(CkXml::ckTreeId(xyz))
Debug "xml TreeId = " + Str(CkXml::ckTreeId(xml))
CkXml::ckDispose(xyz)
CkXml::ckDispose(xml)
ProcedureReturn
EndProcedure