Sample code for 30+ languages & platforms
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

PureBasic
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