17

Я хотел бы знать, возможно ли изменить / создать значения в файлах XML с помощью PowerShell. В основном я заинтересован в:

  • Измените значения в файле XML или создайте их, если они не существуют (т.е. мне нужно найти элемент, создать, если он не существует и изменить значение)
  • Обращайтесь с другим синтаксисом XML в одном и том же XML-файле, например:

Синтаксис 1:

<settings>
  <setting id="Location2" value="Barcelona, Spain"/>
  <setting id="Location2id" value="zmw:00000.1.08181"/>
</settings>

Синтаксис 2:

<settings>
    <musicplayer>
        <crossfade>0</crossfade>
        <queuebydefault>false</queuebydefault>
    </musicplayer>
</settings>

Синтаксис 3:

<settings>
    <skinsettings>
        <setting type="bool" name="skin.confluence.HomepageHideRecentlyAddedVideo">false</setting>
    </skinsettings>
</settings>

Любая помощь будет принята с благодарностью.

Благодарю.

1 ответ1

28

PowerShell полностью поддерживает работу с файлами XML.

Например, если мы возьмем первую предоставленную вами рекламу и просто вставим ее в файл XML с именем settings.xml в папке «C:\blah», вы можете получить идентификатор каждого параметра следующим образом:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id

Который возвращает:

Location2
Location2id

А также

$myXML.settings.setting.value

возвращает:

Barcelona, Spain
zmw:00000.1.08181

Если мы заменим содержимое файла XML на рекламу, указанную в синтаксисе № 2:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade

возвращает:

0

Чтобы прочитать crossfade , измените его (на 2) и сохраните обратно:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade = 2
$myXML.Save("C:\blah\settings.xml")

Редактировать после комментариев:

Изменить сами элементы XML (как в примере с Барселоной) немного сложнее, потому что вы редактируете саму структуру XML, а не данные, которые она содержит.

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")

Для примера Skinsettings попробуйте что-то вроде:

$myXML.settings.skinsettings.setting."#text" = "true"

Проверьте эти ресурсы:

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