Auteur de questions
Powershell et XML

Question
-
Bonjour,
je me lance dans la programmation powershell et l'utilisation d'un fichier xml.
Je souhaiterais pouvoir ajouter trois balises dans un xml avec des balises déjà présentes : je m'explique dans un schéma :
<REQUEST> existant
<CONTENT> existant
</CONTENT> existant
<REQUEST> existant
Je souhaiterais que cela devienne :
<REQUEST>
<CONTENT>
<ACCOUNTINFO> à créer
<KEYNAME>TAG</KEYNAME> à créer
<KEYVALUE>xxxx</KEYVALUE> à créer
</ACCOUNTINFO> à créer
</CONTENT>
<REQUEST>
Avez-vous une idée de comment programmer ceci ??
Merci de votre aide
Bruno
- Déplacé Dan BajenaruMicrosoft employee mercredi 11 juin 2014 12:03 Question PowerShell
Toutes les réponses
-
-
-
Bonjour,
je souhaiterais coder ceci en powershell.
Créer les les trois valises accountinfo, keyname, keyvalue dans un xml existant.
Merci
Bruno
Bonjour Bruno,
C'est tout à fait faisable, mais peux-tu nous donner un fichier XML pour qu'on puisse te donner les actions exactes à mener ?
En gros, tu import ton XML dans PowerShell, tu le mets dans un objet, puis tu ajoutes des nodes grâce aux méthodes de l’objet.
-
Bonjour Emmanuel,
J'ai plusieurs fichiers xml dans un dossier mais je sais comment gérer en sélectionnant avec les items.
Vous pouvez prendre un fichier au hasard pour l'exemple "C:\TEMP\test.xml".
Il faut trouver l'expression node si je comprends bien.
Merci
Bruno
-
Bonjour Emmanuel,
J'ai plusieurs fichiers xml dans un dossier mais je sais comment gérer en sélectionnant avec les items.
Vous pouvez prendre un fichier au hasard pour l'exemple "C:\TEMP\test.xml".
Il faut trouver l'expression node si je comprends bien.
Merci
Bruno
Je n'ai pas accès à ton ordinateur, je ne peux donc pas récupérer le fichier.
Peux-tu copier le contenu ici ?
-
-
C'est bon, merci j'ai trouvé avec ton indication du node :
voilà la prog si cela intéresse quelqu'un :
# load XML file
[xml]$doc = Get-Content "C:\TEMP\test.xml"
# create node <KEYNAME>
$keyname = $doc.CreateNode('element', 'KEYNAME', '')
$tag = $doc.CreateTextNode('TAG')
$keyname.AppendChild($tag)
# create node <KEYVALUE>
$keyvalue = $doc.CreateNode('element', 'KEYVALUE', '')
$key = $doc.CreateTextNode('key')
$keyvalue.AppendChild($key)
# create node <ACCOUNTINFO> and append child nodes <KEYNAME> and <KEYVALUE>
$src = $doc.CreateNode('element', 'ACCOUNTINFO', '')
$src.AppendChild($keyname)
$src.AppendChild($keyvalue)
# append node <ACCOUNTINFO> to node <CONTENT>
$svc = $doc.SelectSingleNode('//CONTENT')
$svc.AppendChild($src)
$doc.Save("C:\TEMP\test2.xml")Bruno
-
Bonjour,
une remarque en passant, les appels de méthode renvoyant des données, telles que AppendChild, doivent être annulé si on ne les utilise pas :
$svc.AppendChild($src) > $null
Sinon la valeur de retour est émise dans le pipeline, ce qui provoque un effet de bord.Beatus, qui prodest, quibus potest.