Powershell: чтение значений из XML-файлов - PullRequest
4 голосов
/ 22 марта 2010

Мне нужна помощь с PowerShell, пожалуйста. Это должно быть довольно просто:

У меня есть список подкаталогов, с файлом XML в каждом. Я хочу открыть каждый XML-файл и распечатать значение одного узла. Узел всегда один и тот же, поскольку файлы xml на самом деле являются файлами проекта (* .csproj) из Visual Studio.

Я уже получил список файлов: get-item ** \ * .csproj

Как мне поступить?

1 Ответ

6 голосов
/ 22 марта 2010

Для получения файлов csproj используйте Get-ChildItem

Get-ChildItem c:\myProjects *.csproj -recurse

Тогда вы можете использовать, например, Select-Xml как это:

$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }
Get-ChildItem c:\myProjects *.csproj -recurse | 
   Select-Xml -xpath '//defaultNamespace:PropertyGroup[1]' -namespace $ns | 
   Select-Object -expand Node

Вы должны исправить пространство имен по умолчанию. У меня нет файла csproj от руки прямо сейчас.
(Подробнее о xml и xpath в PowerShell см. http://huddledmasses.org/xpath-and-namespaces-in-powershell/)

Select-Object необходим для расширения фактического свойства узла.

Если вы хотите работать с xml, как с объектом, вы можете использовать это:

Get-ChildItem c:\myProjects *.csproj -recurse | 
   % { $content = [xml](gc $_.FullName); $content.Project.PropertyGroup[someindex...] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...