web-dev-qa-db-ja.com

PowerShellを使用してXMLファイルの値を変更/作成するにはどうすればよいですか?

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

  • 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> 
 </スキン設定> 
 </ settings> 

任意の助けをいただければ幸いです。

ありがとう。

26
Serieofilo

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

たとえば、最初に提供した広告文を取り、それをフォルダー "C:\ blah"のsettings.xmlという名前の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")

スキン設定の例については、次のようなものを試してください:

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

以下のリソースを確認してください。

37