通过XML元素循环(Loop through xml elements)

2019-08-03 14:42发布

我有以下几点:

$aMyArray = $null


[xml]$userfile = Get-Content C:\AppSense\Scripts\AmPolicyConversion\AM_dev.xml

$i = 0
FOREACH ($j in $userfile.ChildNodes){

    FOREACH($k in $j.DocumentElement) {

    }

    $i = $i + 1
}

我试图通过PowerShell中的每个元素弄清楚如何循环。

然后检查SID的元素的属性。

如果存在得到属性值,并把该值转换为对象,为同一个元素抢到第二个属性显示名称和放置到同一个对象。 我们将创建对象的数组。

我知道我的路要走,但希望你能有所帮助。

Answer 1:

使用XPath,而不是找到的,象这样一个SID属性的所有节点:

$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

下面是与输出的例子:

$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

输出:

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


Answer 2:

您也可以参考,当你通过迭代的childNodes子节点:

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


文章来源: Loop through xml elements