Ошибка чтения из файла XML с помощью Powershell - PullRequest
1 голос
/ 16 января 2020

Мне нужно получить следующее значение из файла XML.

<container>
  <name>ServerName</name>
  <type>Node1</type>
  <applications>
    <application Name="App1">
      <Attribute1>A</Attribute1>
      <Attribute2>B</Attribute2>
    </application>
    <application Name="App2">
      <Attribute1>C</Attribute1>
      <Attribute2>D</Attribute2>
    </application>
    <application Name="App3">
      <Attribute1>E</Attribute1>
      <Attribute2>F</Attribute2>
    </application>
  </applications>
</container>

Чтобы получить атрибут App3, я нашел следующее выражение XPATH: /container/applications/application[@Name='App3']/Attribute1

Проблема в том, что я не знаю, как использовать приведенное выше выражение xpath в Powershell.

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 января 2020

Один способ получить Атрибут1 из приложения 3:

 Select-Xml -Content $Xml -XPath "//applications/application[@Name='App3']/Attribute1" | foreach {$_.node.InnerXML}

Вывод:

E

0 голосов
/ 16 января 2020

Вы можете использовать документ [xml] для поиска необходимого элемента в xml.

[xml]$xml = Get-Content C:\Temp\new.txt
$value = $xml.SelectSingleNode("//container//application[@Name='App3']/Attribute1").InnerText
# $value => E

XPath, который вы используете внутри SelectSingleNode, можно настроить в соответствии с вашими потребностями. //container//application[@Name='App3']/Attribute1 означает

  • Поиск контейнера тегов «где угодно» в документе
  • Поиск приложения в любом месте под тегом контейнера
  • Поиск атрибута для приложения, которое равно App3
  • В соответствии с указанным тегом c Attribute (если он есть) найдите Attribute1 и получите innerText.

Вы также можете написать приведенное выше утверждение следующим образом также. Это означает, что найти тег приложения «где угодно» в документе, но он должен иметь атрибут Name, равный App3.

$value = $xml.SelectSingleNode("//application[@Name='App3']/Attribute1").InnerText
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...