Как изменить / создать значения в XML-файлах с помощью PowerShell?

Я хотел бы знать, можно ли изменять / создавать значения в 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>

любая помощь была бы очень признательна.

спасибо.

9
задан Serieofilo
03.05.2023 14:34 Количество просмотров материала 2670
Распечатать страницу

1 ответ

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"

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

25
отвечен Ƭᴇcʜιᴇ007 2023-05-04 22:22

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх