在PowerShell中,给出以下部分XML结构:
<ExtraAttributes Enabled="1" PerBuildingEnabled="0" PerBuildingMode="0">
<!--PerBuildingMode 0: Inclusively district and building, Mode 1: Exclusively building-->
<Attributes>
<A Enabled="1">
<name>mail</name>
<value>$UserPrincipalName</value>
</A>
<A Enabled="1">
<name>ipPhone</name>
<value>123456</value>
</A>
</Attributes>
</ExtraAttributes>
如果我尝试使用以下内容访问其中一个value
元素的值:
# $ExtraAttributes is extracted as [Xml.XmlElement] from an [Xml.XmlDocument]
foreach ($att in ($ExtraAttributes.Attributes.ChildNodes | where { [int]$_.Enabled -eq $true })) {
Write-Host "Name: $($att.name), Value: $($att.value)"
}
它工作得很好......但是,如果A
下只有一个Attributes
元素,那么:
<ExtraAttributes Enabled="1" PerBuildingEnabled="0" PerBuildingMode="0">
<!--PerBuildingMode 0: Inclusively district and building, Mode 1: Exclusively building-->
<Attributes>
<A Enabled="1">
<name>mail</name>
<value>$UserPrincipalName</value>
</A>
</Attributes>
</ExtraAttributes>
Powershell认为$att.value
是$null
。
当只有一个A
元素与同一个foreach循环一起出现时,如何访问这些元素值? XML可以重组,但我试图避免这种情况。
答案 0 :(得分:0)
我没有使用childNodes
,而是使用了元素名称A
:
foreach ($att in ($ExtraAttributes.Attributes.A | where { [int]$_.Enabled -eq $true })) {
Write-Host "Name: $($att.name), Value: $($att.value)"
}
它是否按预期工作,是否只有一个或多个A
元素。我从未弄清楚为什么childNodes
不能让它发挥作用。