Sample code for 30+ languages & platforms
Swift

XML SearchForTag Method

See more XML Examples

Demonstrates the SearchForTag and SearchForTag2 methods.

The input XML, available at http://www.chilkatsoft.com/data/fruitSearch.xml, is this:

<root>
    <searchRoot>
        <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>
    </searchRoot>
    <fruit color="red">strawberry</fruit>
    <fruit color="orange">peach</fruit>
</root>

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    let xml = CkoXml()!
    var xSearchRoot: CkoXml?
    var xBeginAfter: CkoXml?
    var xFound: CkoXml?

    // The sample input XML is available at http://www.chilkatsoft.com/data/fruitSearch.xml
    success = xml.loadFile(path: "qa_data/xml/fruitSearch.xml")
    if success != true {
        print("\(xml.lastErrorText!)")
        return
    }

    // Search the sub-tree rooted at "searchRoot"
    xSearchRoot = xml.findChild(tagPath: "searchRoot")

    // Search for all nodes having the tag "fruit"
    xBeginAfter = xSearchRoot!.getSelf()
    xFound = xSearchRoot!.search(forTag: xSearchRoot, tag: "fruit")
    while (xSearchRoot!.lastMethodSuccess == true) {

        print("\(xFound!.content!)")

        xBeginAfter = nil
        xBeginAfter = xFound
        xFound = xSearchRoot!.search(forTag: xBeginAfter, tag: "fruit")
    }

    xBeginAfter = nil

    print("--------------------------")

    // ---------------------------------------------------------------------------------
    // Now do the same, but instead use SearchForTag2
    // which updates the internal reference of the caller instead
    // of returning the found node.
    var xSearch: CkoXml?

    xBeginAfter = xSearchRoot!.getSelf()
    xSearch = xSearchRoot!.getSelf()

    success = xSearch!.search(forTag2: xBeginAfter, tag: "fruit")
    while success == true {

        print("\(xSearch!.content!)")

        // Copy the internal references so that the next search
        // begins after the found node.
        xBeginAfter!.copyRef(node: xSearch)
        xSearch!.copyRef(node: xSearchRoot)

        success = xSearch!.search(forTag2: xBeginAfter, tag: "fruit")
    }

    xSearch = nil
    xBeginAfter = nil

    xSearchRoot = nil

}