Переименование узлов в XML сложнее, чем вы могли ожидать.Это особенно плохо, если узел является корневым узлом или родительским со сложной иерархией дочерних узлов.Большинство методов «переименования», которые я видел, клонируют детей и добавляют их в новый узел.Этот процесс становится немного проще, если ваш API также включает метод ReplaceChild.(Я могу предоставить подробности, если они вам нужны.)
Альтернативный метод, который я использовал (особенно если XML можно представить в виде строки), состоит в замене текста в XML перед преобразованием его в XmlDocument.
$InputText = @"
<configuration>
<desktops>
<name>PC001</name>
<domain>CORP</domain>
</desktops>
<laptops>
<name>PC002</name>
<domain>CORP</domain>
</laptops>
</configuration>
"@
$regex = [regex]'(</?)name>'
$ModifiedText = $regex.Replace($InputText,"`$1PC1Name>",2)
$xml = [xml]$ModifiedText
Обратите внимание, что оператор replace находит и исправляет первые 2 вхождения совпадения - открывающий и закрывающий тег только для первого элемента.Удалите номер, чтобы найти и заменить все вхождения в строке.Также обратите внимание, что регулярное выражение захватывает символы открывающего тега, так что они могут быть вставлены в совпадение строки как $ 1.