Using powershell to edit multiple XML files
powershell, powershell-1.0
Solution
You can do it using `CreateElement` and `AppendChild` method
Get-ChildItem c:\temp\ *.xml |
% {
$xml = [xml](Get-Content $_.fullname)
$lastName = $xml.CreateElement('LastName')
$lastName.PsBase.InnerText = 'SomeName'
$null = $xml.People.Names[0].AppendChild($lastName)
$xml.Save($_.FullName)
}
In case that you run PowerShell V2, you don't need to use property `PsBase`:
$lastName.InnerText = 'SomeName'
There are for sure other ways, but this is one is quite easy.
In case that the node would be deeper in xml, you might use Xpath like this (both find first `Names` node):
$node = (Select-Xml -Xml $x -XPath '//Names[1]').Node
$node = (Select-Xml -Xml $x -XPath '//Names[position()=1]').Node
Problem
How can I get a list of multiple XML files from a specified directory and for each file add an element under the second root node using powershell? Example: I want to add `<LastName>SomeName</LastName>` within the FIRST `<Names>` element: ``` <People> <Names> <FirstName>someFirstName</FirstName> </Names> <Names> <FirstName>myFirstName</FirstName> <Address>SomeAddress</Address> </Names> </People> ``` Will become: ``` <People> <Names> <LastName>SomeName</LastName> <FirstName>someFirstName</FirstName> </Names> <Names> <FirstName>myFirstName</FirstName> <Address>SomeAddress</Address> </Names> </People> ```