Получить значения XML с помощью PowerShell - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь получить значения для тегов <Attribute>, <Condition> и <Group>. Может быть несколько тегов <Attribute>, поэтому мне нужно извлекать значения отдельно.

Я пытаюсь подготовить условие из вышеперечисленных тегов. Что-то вроде ниже.

if (HireType -eq 'KI' -and HireType1 = 'KI1' ){
  $Groups = 'A,B,C'
} 

Я пытался написать код с помощью hep ChildNodes, но он объединяет тексты, если есть несколько тегов.

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 голосов
/ 31 августа 2018

Поскольку теги <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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...