15

私は次のものを持っています:

$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 の属性を確認します。

存在する場合は、属性値を取得してその値をオブジェクトに配置し、同じ要素に対して 2 番目の属性 DISPLAYNAME を取得して同じオブジェクトに配置します。オブジェクトの配列を作成します。

私は遠く離れていることを知っていますが、あなたが助けてくれることを願っています.

4

2 に答える 2

19

代わりに 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               
于 2012-12-05T21:56:51.660 に答える
5

childNodes を反復処理するときに、子ノードを参照することもできます。

$j.LocalName (the name of the child element)
$j.InnerXml  (the Xml content of the child node)
于 2013-03-18T17:50:45.900 に答える