PowerShell манипулирует проблемой XML-файла

Предположим, у меня есть следующий XML-файл, и я хочу использовать PowerShell (версия 1.0) для манипулирования XML-файлом, чтобы получить значение для Foo (в этом примере значение, которое я хочу получить, равно "Foo Value") и Goo (в этом пример, значение, которое я хочу получить, это "Goo Value"), есть идеи, как реализовать?

$FooConfig = [xml](get-content .\Foo.exe.config -ErrorAction:stop)

<configuration>
 <appSettings>
    <add key="Foo" value="Foo Value" />
    <add key="Goo" value="Goo Value" />
 </appSettings>
</configuration>

спасибо заранее, Джордж

2 ответа

Решение

API-интерфейс XPath очень жив в PowerShell (в конце концов, ваш XML - это просто объекты.NET), и его часто проще всего использовать, если вам просто нужно значение:

$appSettingsSection = $fooConfig.configuration.appSettings;
$goo = $appSettingsSection.SelectSingleNode("add[@key='Goo']");
$goo.Value

Или, если вы хотите перечислить элементы добавления как коллекцию PowerShell (немного больше PowerShell'ish:-)

$appSettingsSection = $fooConfig.configuration.appSettings.add

Будет печатать

key                                                         value
---                                                         -----
Foo                                                         Foo Value
Goo                                                         Goo Value

И, конечно же, вы можете передать этот результат дополнительным командам для выполнения любой обработки, которая вам нравится.

Тем не менее, другой подход, использующий XPATH с XML API, заключается в использовании SelectNodes:

PS> $FooConfig .SelectNodes('//add')

key                                                         value
---                                                         -----
Foo                                                         Foo Value
Goo                                                         Goo Value
Другие вопросы по тегам