Sample code for 30+ languages & platforms
PowerShell

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

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

$xml = New-Object Chilkat.Xml

$success = $xml.LoadXmlFile("qa_data/xml/fruit.xml")
if ($success -ne $true) {
    $($xml.LastErrorText)
    exit
}

# Iterate over the direct children by using FirstChild / NextSibling
$child = $xml.FirstChild()
$bContinue = $xml.LastMethodSuccess
while (($bContinue -eq $true)) {
    $($child.Tag + " : " + $child.Content)
    $nextSibling = $child.NextSibling()
    $bContinue = $child.LastMethodSuccess

    $child = $nextSibling
}

$("-----")

# Do the same, but with FirstChild2 / NextSibling2 to avoid
# creating so many XML object instances:
$success = $xml.FirstChild2()
while ($success -eq $true) {
    $($xml.Tag + " : " + $xml.Content)
    $success = $xml.NextSibling2()
}

# Revert back up to the parent:
$success = $xml.GetParent2()

$("-----")

# Iterate in reverse order using LastChild / PreviousSibling
$child = $xml.LastChild()
$bContinue = $xml.LastMethodSuccess
while (($bContinue -eq $true)) {
    $($child.Tag + " : " + $child.Content)
    $prevSibling = $child.PreviousSibling()
    $bContinue = $child.LastMethodSuccess

    $child = $prevSibling
}

$("-----")

# Do the same, but with LastChild2 / PreviousSibling2 to avoid
# creating so many XML object instances:
$success = $xml.LastChild2()
while ($success -eq $true) {
    $($xml.Tag + " : " + $xml.Content)
    $success = $xml.PreviousSibling2()
}

# Revert back up to the parent:
$success = $xml.GetParent2()