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)