#xml #powershell #powershell-2.0 #powershell-3.0 #powershell-4.0
#xml #powershell #powershell-2.0 #powershell-3.0 #powershell-4.0
Вопрос:
Я работаю над созданием скрипта Power shell, который считывает XML-файл и извлекает значения из узлов для выполнения дальнейших вычислений. Как я мог бы извлечь значения узла в переменные?
Я написал код, используя XMLDOC в PS, чтобы прочитать файл и извлечь значения в Power shell. Я могу получить значение атрибута одного узла. Я не могу извлечь значение узла, у которого тоже есть атрибуты, и существует несколько вхождений узла.
Test.xml
<abc>
<body>
<Rows Count="02">
<Row>
<a ID="1">Name1</a>
<a ID="2">Naresh</a>
<a ID="3">Arvind</a>
</Row>
<Row>
<a ID="1">Name2</a>
<a ID="2">Sathish</a>
<a ID="3">Kannan</a>
</Row>
</Rows>
</body>
<abc>
Код
[xml]$XmlDocument = Get-Content E:DesktopTest.xml
$nodes = $XmlDocument.SelectNodes('//Rows')
$A = $nodes.GetAttribute("count")
if ($A -eq '02')
{
$B = $XmlDocument.abc.Body.Rows.ROW.a | Where-Object {$_.ID -eq '2'}
}
Ожидаемый результат
Переменная A должна получить «02» (единственное значение) и «Naresh», «Sathish» (только значения) должны храниться в 2 разных переменных
Фактический результат
Переменная A получает «02» — она работает, оба «Naresh» и «Sathish» хранятся в переменной B, но вместе с идентификаторами и заголовками.
Ответ №1:
[xml] $str = @'
<abc>
<body>
<Rows Count="02">
<Row>
<a ID="1">Name1</a>
<a ID="2">Naresh</a>
<a ID="3">Arvind</a>
</Row>
<Row>
<a ID="1">Name2</a>
<a ID="2">Sathish</a>
<a ID="3">Kannan</a>
</Row>
</Rows>
</body>
</abc>
'@
$a = $str.abc.body.Rows.Row.a | Where-Object {$_.ID -eq '2'} | Select-Object -ExpandProperty '#text'
Используйте свойство Select-Object, и на выходе у вас будут только Naresh и Sathish.
Комментарии:
1. Можем ли мы извлечь «Naresh» и «Sathish» из двух разных переменных? $ A = Naresh $ B = Sathish Можем ли мы использовать where-object для первых полей?
2. Я использовал массив для разделения значений на две переменные