我正在尝试获取<Attribute>
,<Condition>
和<Group>
标签的值。
可以有多个<Attribute>
标签,所以我需要分别获取值。
我正在尝试根据上述标签准备条件。像下面这样。
if (HireType -eq 'KI' -and HireType1 = 'KI1' ){
$Groups = 'A,B,C'
}
我试图用子节点的堆写代码,但是如果有多个标签,它将合并文本。
XML
<UserData>
<FilterCriteria>
</FilterCriteria>
<GroupCriteria>
<Criteria>
<Attributes>
<Attribute>
<AttrName>HireType</AttrName>
<AttrValue>KI</AttrValue>
</Attribute>
<Attribute>
<AttrName>HireType1</AttrName>
<AttrValue>KI1</AttrValue>
</Attribute>
<Condition>and</Condition>
<Groups>A,B,C</Groups>
</Attributes>
</Criteria>
</GroupCriteria>
</UserData>
代码
[xml] $xml = Get-Content -Path C:\Users\Arun\Desktop\UserData.xml
$xml.UserData.GroupCriteria | foreach {
$_.Criteria | foreach {
$_.Attributes | foreach {
$_.ChildNodes | % {
$Name = $_.Name
$Value = $_.InnerText
write-host "$Name : $Value"
}
}
}
}
输出
Attribute : HireTypeKI
Attribute : HireType1KI1
Condition : and
Groups : A,B,C
答案 0 :(得分:3)
由于<Attribute>
标签的结构不同,因此您需要处理与其他标签不同的标签:
foreach ($node in $xml.UserData.GroupCriteria.Criteria.Attributes.ChildNodes) {
switch ($node.Name) {
'Attribute' {
$Name = $node.AttrName
$Value = $node.AttrValue
}
default {
$Name = $node.Name
$Value = $node.InnerText
}
}
Write-Host "$Name : $Value"
}