4

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.

JustAGuy
  • 659

3 Answers3

4

Out-File is writing a Unicode file by default. Use -Encoding to fix it:

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

Alternatively, use Set-Content:

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

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.

0

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.

EliadTech
  • 1,260