Я провел довольно много поисков / экспериментов, и я знаю, что подобные проблемы были решены, но я борюсь с этой проблемой специально и пытаюсь найти другую пару глаз. Моя цель - проанализировать 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 ' \ ( . * '

1 ответ1

1
$gameNames.menu.game | foreach { $_.Name = $_.Name -replace '\(.*', "(USA)" }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .