ade*_*ean 11 xml powershell foreach powershell-2.0 xml-parsing
我有以下内容:
$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
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何遍历powershell中的每个元素.
然后检查元素上的SID属性.
如果存在获取属性值并将该值放入对象,并且对于同一元素,则获取第二个属性DISPLAYNAME并放入同一对象.我们将创建一个对象数组.
我知道我离开了,但希望你能帮忙.
Kei*_*ill 14
使用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
Run Code Online (Sandbox Code Playgroud)
这是输出的示例:
$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
Run Code Online (Sandbox Code Playgroud)
输出:
SID DISPNAME
--- --------
foosid foodisp
barsid bardisp
blechsid blechdisp
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以在迭代 childNodes 时引用子节点:
$j.LocalName (the name of the child element)
$j.InnerXml (the Xml content of the child node)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66744 次 |
| 最近记录: |