Замена узлов XML в PowerShell
у меня есть два XML-файла (File1.XML-файле Файл2.XML.) Файл2.xml является подмножеством File1.XML.
File1.xml имеет такие узлы:
<parentnode>
<item id="GUID1">
<Text>Some Text</Text>
</item>
<item id="GUID2">
<Text>Here’s some more text</Text>
</item>
</parentnode>
File2.xml имеет:
<parentnode>
<item id="GUID1">
<Text>Some Replacement Text</Text>
</item>
</parentnode>
Я хочу взять элемент С GUIDx в File1.xml, и замените его на элемент С GUIDx из файла file2.XML. По сути, я хочу взять текст замены в File2.xml и вставить его в соответствующий элемент узел в File1.в XML
Как это сделать в PowerShell?
1 ответов
Предположим, у меня есть первый xml в переменной $edited
и второй $new
. Затем вы можете изменить значение в элементе с id на guid1 via
$edited.parentnode.item |
? { $_.id -eq 'guid1' } |
% { $_.Text = $new.parentnode.item.Text }
# and save the file
$edited.Save('d:\File1.xml')
# see the changes
gc d:\File1.xml
если у вас есть больше элементов для замены, вы можете использовать вложенные конвейеры:
$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 }
}
или foreach
цикл, который более читаем здесь:
foreach($i in $new.parentnode.item) {
$edited.parentnode.item |
? { $_.id -eq $i.Id } |
% { $_.Text = $i.Text }
}