2010-06-08 2 views
2

У меня есть каталог с файлами XML. Я быстро хочу пройти через них и суммировать значение, хранящееся в одном атрибуте. Я понял, как fidn узлов Я заинтересован вСуммарное значение атрибутов XML с использованием PowerShell 2.0

. Например:

(Select-Xml -Path .\*.xml -XPath "//*[@Attribue = 'valueImlookingfor']").Count 

Эта команда дает мне количество элементов во всех файлах XML в текущем каталоге, который имеет значение «valueImlookingfor» в «Attribue».

Я хочу подвести все значения «Атрибут», а не считать их. Каким будет лучший способ сделать это в PowerShell? Я новичок в PowerShell, так что это может быть тривиальным, но не-известно мне ...

Все советы очень ценятся :-)

ответ

2
$total = 0; select-xml -path .\*.xml -xpath "//*/@Attribute" | foreach { $total += [int] $_.node.value }; $total 

Breakdown:

  • $total = 0 - мы 'собираемся суммировать эту переменную.
  • select-xml -path .\*.xml -xpath ... - возвращает коллекцию всех узлов XML, соответствующих данному выражению XPath, в любом из * .xml-файлов в текущей папке.
  • //*/@Attribute - возвращает все атрибуты узлов любого элемента в любом месте дерева XML.
  • | foreach { ... } - pass ('pipe') коллекция возвращается select-xml в командную команду foreach. foreach выполняет заданный сегмент кода для каждого элемента коллекции. Доступ к элементу коллекции осуществляется через $_.
  • $total += [int] $_.node.value - добавить к $total значение текущего атрибута, преобразованного из строки в целое.
  • ; $total - наконец, вернуть значение $total. Поскольку это нигде не назначено, значение записывается в консоль.
+0

Спасибо! Я еще не все знаком с PowerShell ... высоко ценю! – Yooakim

Смежные вопросы