Loop through xml elements Loop through xml elements xml xml

Loop through xml elements


Use XPATH instead to find all nodes with a SID attribute like so:

$objs = @()$nodes = $userfile.SelectNodes("//*[@SID]")foreach ($node in $nodes) {    $sid = $node.attributes['SID'].value    $dispName = $node.attributes['DISPLAYNAME'].value    $obj = new-object psobject -prop @{SID=$sid;DISPNAME=$dispName}    $objs += $obj}$objs

Here's an example with output:

$xml = [xml]@"<doc>  <foo SID='foosid' DISPLAYNAME="foodisp">    <bar SID='barsid' DISPLAYNAME="bardisp"/>    <baz>      <blech SID='blechsid' DISPLAYNAME="blechdisp"/>    </baz>  </foo></doc>"@$objs = @()$nodes = $xml.SelectNodes("//*[@SID]")foreach ($node in $nodes) {    $sid = $node.attributes['SID'].value    $dispName = $node.attributes['DISPLAYNAME'].value    $obj = new-object psobject -prop @{SID=$sid;DISPNAME=$dispName}    $objs += $obj}$objs

Outputs:

SID                       DISPNAME                ---                       --------                foosid                    foodisp                 barsid                    bardisp                 blechsid                  blechdisp               


You can also reference the child nodes when you are iterating through the childNodes:

$j.LocalName (the name of the child element)$j.InnerXml  (the Xml content of the child node)