Как зациклить и прочитать все необходимые значения атрибутов из XML с помощью Powershell - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующие XML-данные в файле «Test1.xml»:

<TextValuess>
  <TextValues Name="Value1" Override="true" Type="String">
      <DEV>Source=DEV;Catalog=DEV_DMT;Integrated Security=SSPI;</DEV>
      <INT10>Source=LAB;Catalog=TST_INT10;Integrated Security=SSPI;</INT10>
      <INT>Source=LAB1;Catalog=TST_INT1;Integrated Security=SSPI;</INT>
      <INT2>Source=LAB10;Catalog=TST_INT12;Integrated Security=SSPI;</INT2>
  </TextValues>
  <TextValues Name="ENVIRONMENT" Override="true" Type="String">
      <DEV>DEV</DEV>
      <INT10>INT10</INT10>
      <INT>INT1</INT>
      <INT2>INT15</INT2>
  </TextValues>
</TextValuess>

Я хочу просмотреть все атрибуты и извлечь данные с помощью PowerShell, передав параметр, который мне нужно получить,

Например: если я передаю значения переменной как INT10, мне нужны только следующие значения, например:

Name               Value
----               -----
Value1             LAB
Environment        INT10

Мне удалось получить одно из значений элемента с помощью приведенных ниже команд PowerShell.

[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml
$XmlDocument.TextValuess.TextValues[0].INT10
$XmlDocument.TextValuess.TextValues[1].INT10

Но теги XML могут увеличиваться или уменьшаться каждый раз в зависимости от файла.Мне нужно просмотреть существующие данные и получить результаты.

Я не уверен, как использовать foreach для чтения всех значений в файле.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Самый универсальный способ выбора данных из XML-структур - XPath .В вашем случае вы бы сделали что-то вроде этого:

$child = 'INT10'
$XmlDocument.SelectNodes("//TextValues[./${child}]") | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Name'  = $_.Name
        'Value' = $_.$child
    }
} | Select-Object Name, Value

Если вы хотите получить частичную информацию из дочернего узла, вам нужно указать, как это делается.Например:

($_.$child -split ';')[0] -replace '^Source='
0 голосов
/ 18 декабря 2018

Вы можете просто передать TextValues в Select-Object и указать имена свойств, значения которых вы хотите:

[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml

$XmlDocument.TextValuess.TextValues | Select-Object Name, INT10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...