У меня есть довольно большой 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, но попробовать стоит.