PowerShell manipulating XML file issue

By : George2
Source: Stackoverflow.com
Question!

Suppose I have the following XML file, and I want to use PowerShell (version 1.0) to manipulate the XML file to get the value for Foo (in this sample, value I want to get is "Foo Value") and Goo (in this sample, value I want to get is "Goo Value"), any ideas how to implement?

$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>

thanks in advance, George

By : George2


Answers
The XPath API is very alive under PowerShell (your XML is, after all, just .NET objects), and it can often be the easiest to use if you just want a value:

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

Or if you want to enumerate the add elements as a PowerShell collection (a bit more PowerShell'ish :-)

$appSettingsSection = $fooConfig.configuration.appSettings.add

Will print

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

And of course, you can pipe that result to additional commands to do whatever processing you like.

By : driis


Yet annother approach using XPATH with the XML API is to use SelectNodes:

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

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


This video can help you solving your question :)
By: admin