使用PowerShell获取XML值

时间:2018-08-31 08:06:32

标签: xml powershell

我正在尝试获取<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

1 个答案:

答案 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"
}