I have a rather large XML file that I need to replace some connection strings within.
I use the following code to replace the strings:
$temp = Get-Content .\bigxmlfile.xml
$temp.replace("STRING1","STRING2") | out-file .\bigxmlfile.xml -force
This changes the strings just fine but for some reason ALWAYS ends up breaking the XML. I'm having trouble figuring out why.
Out-File
is writing a Unicode file by default. Use-Encoding
to fix it:Alternatively, use
Set-Content
:If you process XML using non-XML-aware tools, you will always run this risk. If you want to do a transformation on XML, the best tool for the job is the XML transformation language, XSLT.
Have you tried using Import-CLIXML instead of Get-Content?
I don't know how well it handles big or complex xml files, but it's worth a shot.