Nous allons voir dans cet article les bases permettant de gérer un fichier Xml avec Windows PowerShell. Dans les exemples suivants, nous allons lire le fichier Xml. Le premier exemple utilise la méthode de l'index pour lire les données. Le second exemple utilise la commande foreach.
En premier lieu, nous allons créer un fichier texte "livres.xml". Ce fichier doit contenir les lignes de données suivantes :
Fichier XML
En premier lieu, nous allons créer un fichier texte "livres.xml". Ce fichier doit contenir les lignes de données suivantes :
<?xml version="1.0" standalone="yes"?>
<Livres>
<Manga Edition="Kana">
<Titre>Jumbor</Titre>
<Numero>1</Numero>
</Manga>
<Manga Edition="Ki-oon">
<Titre>Ubel Blatt</Titre>
<Numero>1</Numero>
</Manga>
</Livres>
<Livres>
<Manga Edition="Kana">
<Titre>Jumbor</Titre>
<Numero>1</Numero>
</Manga>
<Manga Edition="Ki-oon">
<Titre>Ubel Blatt</Titre>
<Numero>1</Numero>
</Manga>
</Livres>
Une fois le fichier enregistré (dans c:\temp par exemple), nous allons utiliser PowerShell pour le lire.
Exemple 1
#Lecture du fichier.
[xml]$xml = get-content (“c:\temp\livres.xml”)
#Je récupéré dans $Livres les données entre la balise <Livres> et </Livres>.
$Livres = $xml.Livres
#Puis j'affiche mes données.
Write-Host $Livres.Manga[0].Edition
Write-Host $Livres.Manga[0].Titre
Write-Host $Livres.Manga[0].Numero
[xml]$xml = get-content (“c:\temp\livres.xml”)
#Je récupéré dans $Livres les données entre la balise <Livres> et </Livres>.
$Livres = $xml.Livres
#Puis j'affiche mes données.
Write-Host $Livres.Manga[0].Edition
Write-Host $Livres.Manga[0].Titre
Write-Host $Livres.Manga[0].Numero
Ici je suis obligé d'indexer $Livre.Manga[] car dans mon fichier Xml, j'ai plusieurs fois la balise <Manga>. Si la balise n'était présente qu'une seul fois, j'aurais dû écrire Write-Host $Livres.Manga.Edition (sans l'indexation). Ceci viens de l’interprétation de la commande Get-Content. Lorsqu'il rencontre plusieurs fois une même balise, il la traduit sous la forme d'un tableau. Pour éviter les problèmes d'écriture suivant le nombre d’élément répétable présent dans un document Xml, il vaut mieux passer par un Foreach :
Exemple 2
#Lecture du fichier.
[xml]$xml = get-content (“c:\temp\livres.xml”)
#Je récupéré dans $Livres les données entre la balise <Livres> et </Livres>.
$Livres = $xml.Livres
#Puis j'affiche mes données.
foreach ($m in $Livres.Manga)
{
Write-Host $m.Edition
Write-Host $m.Titre
Write-Host $m.Numero
}
[xml]$xml = get-content (“c:\temp\livres.xml”)
#Je récupéré dans $Livres les données entre la balise <Livres> et </Livres>.
$Livres = $xml.Livres
#Puis j'affiche mes données.
foreach ($m in $Livres.Manga)
{
Write-Host $m.Edition
Write-Host $m.Titre
Write-Host $m.Numero
}
Ici, la commande foreach fonctionne quelques soit le nombre de balise <Manga> présent dans le document Xml.