PowerShellを使用してXMLファイルの値を変更/作成する方法は?


24

PowerShellを使用してXMLファイルの値を変更/作成できるかどうかを知りたいです。基本的に私は興味があります:

  • XMLファイルの値を変更するか、値が存在しない場合は作成します(つまり、アイテムを検索し、存在しない場合は作成し、値を変更する必要があります)
  • これらのような同じXMLファイル内の異なるXML構文を処理します。

構文1:

<設定>
  <setting id = "Location2" value = "バルセロナ、スペイン" />
  <setting id = "Location2id" value = "zmw:00000.1.08181" />
</ settings>

構文2:

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

構文3:

<設定>
    <スキン設定>
        <setting type = "bool" name = "skin.confluence.HomepageHideRecentlyAddedVideo"> false </ setting>
    </ skinsettings>
</ settings>

どんな助けも大歓迎です。

ありがとう。

回答:


36

PowerShellは、XMLファイルの処理を完全にサポートしています。

たとえば、指定した最初の文言を取得してsettings.xml、フォルダー「C:\ blah」にあるXMLファイルに貼り付けると、各設定のIDを取得できます。

[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構造自体を編集しているからです。

[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"

以下のリソースをご覧ください。


答えてくれてありがとう。あなたの提案を読みましたが、バルセロナからニューヨークへの最初のブロブのid = "Location2"の値を更新しようとしていますが、成功しません。3番目のblobでも同じです(「true」に変更しようとしています)。これらの種類の値を検索/変更するにはどうすればよいですか?
セリエフィロ

次を使用して、変更するノードを選択しようとしています$MyXML.SelectSingleNode("/settings/skinsettings/setting[@type='bool' and @name='skin.confluence.HomepageHideRecentlyAddedVideo']")が、値を「false」から「true」に変更するにはどうすればよいですか。または、このようなノードが存在しない場合、どのように作成できますか?
セリエフィロ

1
編集内容を確認してください。さらに情報を追加しました。:)
Ƭᴇcʜιᴇ007
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.