0

我有一個XML文件,並且希望在XML文檔中查找所有「en-us」字符串並將其替換爲不同的文化。我能夠找到他們,但不知道如何替換它。嘗試替換,獲取內容和設置內容,並沒有工作。也許我沒有正確使用它。查找並替換XML文檔中的字符串

$testPath = "C:\temp\testing\" 
$path = Get-ChildItem $testPath -Recurse 
ForEach ($file in $path){ 
    $file | Select-String -AllMatches "en-us" | % { $_.Matches } 
} 
+0

可能重複http://stackoverflow.com/questions/19794187/how-to-use-operator-replace-in-powershell-to-replace-strings-of-texts-with-sp – user4317867

+0

你可以顯示部分的XML? – Avshalom

+0

請勿在XML文件上使用字符串替換。 XML是一種結構化的格式,簡單的字符串替換可能會破壞結構。 –

回答

0

這是從我的評論中的鏈接。

$testpath = "C:\Temp\z" ;$path=gci $testpath -Recurse 
$path.fullname | ForEach-Object {(GC $_ -Raw).Replace('line2','NewLine2')| Set-Content $_} 
+0

這將做到這一點。非常感謝! @ user4317867。 如果你不介意,你能解釋一下什麼是「-Raw」呢?謝謝! –

+0

不客氣! Raw在一個字符串中讀取整個文件內容,這是從'Get-Help Get-Content -full'中得到的,正如它指出的那樣,可能會破壞你的XML文件結構。 – user4317867

0

我發現這是一個快速的方式在文本文件替換值:

[System.IO.File]::WriteAllText(
    'C:\path\to\export-file.xml', 
    ([System.IO.File]::ReadAllText('C:\path\to\import-file.xml') -replace 'en-us', 'new value'), 
    (New-Object System.Text.UTF8Encoding($false)) 
) 

它會讀取進口-file.xml的一切,與「新值替換「EN-US」 '並使用UTF8保存到export-file.xml沒有BOM編碼。正如Ansgar在上面的評論中指出的那樣,我不能保證這不會破壞你的xml。