web-dev-qa-db-fra.com

Comment modifier / créer des valeurs dans des fichiers XML avec PowerShell?

J'aimerais savoir s'il est possible de modifier/créer des valeurs dans des fichiers XML avec PowerShell. Fondamentalement, je suis intéressé par:

  • Modifiez les valeurs dans le fichier XML ou créez-les si elles n'existent pas (c'est-à-dire que je dois rechercher l'élément, créer s'il n'existe pas et modifier la valeur)
  • Traitez avec différentes syntaxes XML dans le même fichier XML comme ceux-ci:

Syntaxe 1:

 <settings> 
 <setting id = "Location2" value = "Barcelone, Espagne" />
 <setting id = "Location2id" value = "zmw: 00000.1.08181" />
</settings>

Syntaxe 2:

 <paramètres> 
 <musicplayer> 
 <crossfade> 0 </ crossfade> 
 <queuebydefault> false </ queuebydefault> 
 </ musicplayer > 
 </ settings> 

Syntaxe 3:

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

Toute aide serait très appréciée.

Merci.

20
Serieofilo

PowerShell prend totalement en charge le traitement des fichiers XML.

Par exemple, si nous prenons le premier texte de présentation que vous avez fourni et collez-le simplement dans un fichier XML nommé settings.xml dans le dossier "C:\blah", vous pouvez obtenir l'ID de chaque paramètre en tant que tel:

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

Qui retourne:

Location2
Location2id

Et

$myXML.settings.setting.value

résultats:

Barcelona, Spain
zmw:00000.1.08181

Si nous remplaçons le contenu du fichier XML par le texte de présentation que vous avez fourni dans la syntaxe n ° 2:

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

résultats:

0

Pour lire crossfade, remplacez-le (par 2) et sauvegardez:

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

Modifier après les commentaires:

Changer les éléments XML eux-mêmes (comme dans l'exemple de Barcelone) est un peu plus délicat, car vous éditez la structure XML elle-même, pas les données qu'elle contient.

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

Pour l'exemple Skinsettings, essayez quelque chose comme:

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

Découvrez ces ressources:

32
Ƭᴇcʜιᴇ007