Я провел довольно много поисков / экспериментов, и я знаю, что подобные проблемы были решены, но я борюсь с этой проблемой специально и пытаюсь найти другую пару глаз. Моя цель - проанализировать XML-файл на наличие имен, изменить имена и сохранить их. Мой .xml вкратце:
<?xml version="1.0"?>
<menu>
<header>
<listname>Thing</listname>
<lastlistupdate>11/15/2011</lastlistupdate>
<listversion>1.1 Final</listversion>
<exporterversion>12.0</exporterversion>
</header>
<game name="My - Game (Japan) (Eu,Br)" index="true" image="0">
<description>My - Game (Japan) (Eu,Br)</description>
<cloneof></cloneof>
<crc>8B70CB5B</crc>
<manufacturer>Manufacturer</manufacturer>
<year>1997</year>
<genre>Shooter</genre>
<rating>ESRB - T (Teen)</rating>
<enabled>Yes</enabled>
</game>
<game name="Some Other Cool Game (Stuff) (Foo) (Bar)" index="" image="">
<description>Some Other Cool Game (Stuff) (Foo) (Bar)</description>
<cloneof></cloneof>
<crc>34F0EE5B</crc>
<manufacturer>Manufacturer</manufacturer>
<year>2000</year>
<genre>Shooter</genre>
<rating>ESRB - T (Teen)</rating>
<enabled>Yes</enabled>
</game>
Мне нужно удалить все после первого "(" в поле "название игры" и заменить это содержимое на "(США)", поэтому имя первой игры необходимо изменить с:
My - Game (Japan) (Eu,Br)
Some Other Cool Game (Stuff) (Foo) (Bar)
Для того, чтобы:
My - Game (USA)
Some Other Cool Game (USA)
Я довольно близок и могу заставить Powershell распечатать исправленные имена с помощью:
[xml] $ gameNames = Get-Content '.\myXML.xml' $ gameNames.menu.game | foreach {$ _.Имя-место '(. *', "(США)"}
Чего я не могу понять, так это как сохранить эти новые имена в узлах "название игры". Я пытался добавить | Set-Content '.\myXML.xml'
в конец моей трубы, но это просто переписывает исходный .xml с переименованными названиями игр и без исходных данных.
* Редактировать: перед последней строкой "\" стоит знак "\". Он не отображается, но (без пробелов) строка должна выглядеть следующим образом: -replace ' \ ( . * '