Suppose I have the first xml in the variable $edited , and the second in $new . Then you can change the value in the element with GUID1 via
$edited.parentnode.item | ? { $_.id -eq 'guid1' } | % { $_.Text = $new.parentnode.item.Text }
If you have more elements to replace, you can use nested pipelines:
$edited = [xml]@" <parentnode> <item id="GUID1"><Text>Some Text</Text></item> <item id="GUID2"><Text>Here's some more text</Text></item> <item id="GUID3"><Text>Here's some more text</Text></item> <item id="GUID10"><Text>Here's some more text</Text></item> </parentnode> "@ $new = [xml] @" <parentnode> <item id="GUID1"><Text>new Guid1</Text></item> <item id="GUID2"><Text>new Guid2</Text></item> <item id="GUID3"><Text>new Guid3</Text></item> <item id="GUID4"><Text>new Guid4</Text></item> <item id="GUID5"><Text>new Guid5</Text></item> </parentnode> "@ $new.parentnode.item | % { ,($_.id,$_.Text)} | % { $id,$text = $_; $edited.parentnode.item | ? { $_.id -eq $id } | % { $_.Text = $text } }
or foreach , which is more readable here:
foreach($i in $new.parentnode.item) { $edited.parentnode.item | ? { $_.id -eq $i.Id } | % { $_.Text = $i.Text } }
stej
source share