Назад | Перейти на главную страницу

Замена строки в XML на Powershell вызывает НЕПРАВИЛЬНЫЙ XML

У меня есть довольно большой XML-файл, в котором мне нужно заменить некоторые строки подключения.

Я использую следующий код для замены строк:

$temp = Get-Content .\bigxmlfile.xml
$temp.replace("STRING1","STRING2") | out-file .\bigxmlfile.xml -force

Это меняет строки очень хорошо, но по какой-то причине ВСЕГДА приводит к нарушению XML. Мне сложно понять, почему.

Out-File по умолчанию записывает файл Unicode. Использовать -Encoding Исправить это:

$temp = Get-Content .\bigxmlfile.xml
$temp.replace("STRING1","STRING2") | out-file .\bigxmlfile.xml -force -encoding ascii

В качестве альтернативы используйте Set-Content:

$temp = Get-Content .\bigxmlfile.xml
$temp.replace("STRING1","STRING2") | set-content .\bigxmlfile.xml -force

Если вы обрабатываете XML с помощью инструментов, не поддерживающих XML, вы всегда будете подвергаться этому риску. Если вы хотите выполнить преобразование в XML, лучшим инструментом для этой работы является язык преобразования XML, XSLT.

Вы пробовали использовать Import-CLIXML вместо Get-Content?
Я не знаю, насколько хорошо он обрабатывает большие или сложные файлы xml, но попробовать стоит.