Sample code for 30+ languages & platforms
Swift

Traverse Direct Children via FirstChild / NextSibling, or LastChild / PreviousSibling

See more XML Examples

Demonstrates some ways to iterate over direct child nodes using the FirstChild / NextSibling and LastChild / PreviousSibling methods.

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 Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    let xml = CkoXml()!
    var child: CkoXml?
    var nextSibling: CkoXml?
    var prevSibling: CkoXml?

    success = xml.loadFile(path: "qa_data/xml/fruit.xml")
    if success != true {
        print("\(xml.lastErrorText!)")
        return
    }

    // Iterate over the direct children by using FirstChild / NextSibling
    child = xml.firstChild()
    var bContinue: Bool = xml.lastMethodSuccess
    while (bContinue == true) {
        print("\(child!.tag!) : \(child!.content!)")
        nextSibling = child!.nextSibling()
        bContinue = child!.lastMethodSuccess
        child = nil
        child = nextSibling
    }

    print("-----")

    // Do the same, but with FirstChild2 / NextSibling2 to avoid
    // creating so many XML object instances:
    success = xml.firstChild2()
    while success == true {
        print("\(xml.tag!) : \(xml.content!)")
        success = xml.nextSibling2()
    }

    // Revert back up to the parent:
    success = xml.getParent2()

    print("-----")

    // Iterate in reverse order using LastChild / PreviousSibling
    child = xml.lastChild()
    bContinue = xml.lastMethodSuccess
    while (bContinue == true) {
        print("\(child!.tag!) : \(child!.content!)")
        prevSibling = child!.previousSibling()
        bContinue = child!.lastMethodSuccess
        child = nil
        child = prevSibling
    }

    print("-----")

    // Do the same, but with LastChild2 / PreviousSibling2 to avoid
    // creating so many XML object instances:
    success = xml.lastChild2()
    while success == true {
        print("\(xml.tag!) : \(xml.content!)")
        success = xml.previousSibling2()
    }

    // Revert back up to the parent:
    success = xml.getParent2()

}