私は以下を持っています:
$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を取得して同じオブジェクトに配置します。オブジェクトの配列を作成します。
私は遠く離れていることを知っていますが、あなたが助けることができることを願っています。
代わりに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
ChildNodesを反復処理するときに、子ノードを参照することもできます。
$j.LocalName (the name of the child element)
$j.InnerXml (the Xml content of the child node)