0

У меня есть XML-файл и вы хотите найти всю строку «en-us» в XML-документе и заменить на другую культуру. Я могу найти их, но не знаю, как их заменить. Попробовал заменить, получить контент и установить контент и не работал. Возможно, я не использовал его правильно.Найти и заменить строки в XML doc

$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, заменить «ан-нас» с «новым значением 'и сохранить в файл export-file.xml с использованием кодировки UTF8 без спецификации. Как заметил Ансгар в комментарии выше, я не могу ручаться, что это не сломает ваш xml.

 Смежные вопросы

  • Нет связанных вопросов^_^