В PowerShell, учитывая следующую неполную структуру XML:Доступ к значениям элементов 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 может быть реструктурирован, но я стараюсь избегать этого.
Код, который вы опубликовали, отлично работает с обе частичными структурами, когда я устанавливаю '$ ExtraAttributes' в корневой элемент XML-фрагмента. Следовательно, проблема, скорее всего, связана с тем, как вы выбираете узел '' из фактических данных. –
Я был бы признателен, если бы вы могли отказаться от моего вопроса. Я понял это, хотя я и не обнаружил первопричины. Параметр '$ ExtraAttributes' элемент был снят с корневого документа в следующем формате: ' [XML] $ конфиг = Get-Content myfile.xml' '$ ExtraAttributes = $ config.Configuration.District.ExtraAttributes' Если есть лучший способ сделать это, я хотел бы знать. – Ben