Question
Suppression d'un node dans un fichier XML
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 13 ans 10 mois #11728
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Suppression d'un node dans un fichier XML
Alors, en fait il suffit de mettre le @ devant le name (sensible à la casse) pour attaquer l'attribut.
Il y a deux choses à différencier, les attributs dans les noeuds et les noeuds avec une valeur texte.
noeud avec attribut name
[code:1]
<host name=\"Pc2096\" profile-id=\"Ccleaner\"/>
[/code:1]
noeud avec valeur texte
[code:1]
<host profile-id=\"Ccleaner\">
<name>Pc2096</name>
</host>
[/code:1]
Il y a deux choses à différencier, les attributs dans les noeuds et les noeuds avec une valeur texte.
noeud avec attribut name
[code:1]
<host name=\"Pc2096\" profile-id=\"Ccleaner\"/>
[/code:1]
noeud avec valeur texte
[code:1]
<host profile-id=\"Ccleaner\">
<name>Pc2096</name>
</host>
[/code:1]
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Mouloud
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 13 ans 10 mois #11730
par Mouloud
Réponse de Mouloud sur le sujet Re:Suppression d'un node dans un fichier XML
Merci beaucoup à tous pour vos réactions, cela me permet dejà de voir plus clair.
J'ai cependant encore un soucis. J'aimerais recevoir dans le script l'attribut name à supprimer via un argument.
J'ai procédé comme ceci mais j'ai systématiquement une erreur. J'ai essayé de jouer sur les quotes en me disant que cela viendrai peut-être de ça mais je ne trouve pas la solution.
[code:1]
$pc = PC2334
#$pc = $args
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = 'C:\hosts.xml'}
$xml.wpkg.RemoveChild($xml.SelectSingleNode('//host[@name=''$pc'']'))
$xml.Save('C:\hosts.xml')
[/code:1]
Comme vous voyez j'ai essayé en entrant la string moi-même ou en la recevant directement comme paramètre lors de l'appel du script, mais je tourne en rond. Ca m'a l'air d'une bêtise en plus mais je n'arrive pas à mettre la main dessus...
Encore merci à vous.
J'ai cependant encore un soucis. J'aimerais recevoir dans le script l'attribut name à supprimer via un argument.
J'ai procédé comme ceci mais j'ai systématiquement une erreur. J'ai essayé de jouer sur les quotes en me disant que cela viendrai peut-être de ça mais je ne trouve pas la solution.
[code:1]
$pc = PC2334
#$pc = $args
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = 'C:\hosts.xml'}
$xml.wpkg.RemoveChild($xml.SelectSingleNode('//host[@name=''$pc'']'))
$xml.Save('C:\hosts.xml')
[/code:1]
Comme vous voyez j'ai essayé en entrant la string moi-même ou en la recevant directement comme paramètre lors de l'appel du script, mais je tourne en rond. Ca m'a l'air d'une bêtise en plus mais je n'arrive pas à mettre la main dessus...
Encore merci à vous.
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 13 ans 10 mois #11731
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Suppression d'un node dans un fichier XML
Alors, pour faire cela, il faut connaître la gestion des chaînes de caractères.
Les double quotes qui est une chaîne de caractère interprété cad que les variables seront évaluées (entre autre)
Les simple quotes est une chaîne de caractère basique.
Pour plus d'info voir Help about_Quoting_Rules
De cette aide, que je te conseille fortement de lire, voici ce que nous pouvons en tirer :
[code:1]
$pc = PC2334
#$pc = $args
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = 'C:\hosts.xml'}
$xml.wpkg.RemoveChild($xml.SelectSingleNode(\"//host[@name='$pc']\"«»))
$xml.Save('C:\hosts.xml')
[/code:1]
Tu remarqueras la disparition du doublement de la simple quote autour de la valeur car la chaîne est maintenant délimité avec des doubles quotes.
En espérant avoir été clair.
Bien Cordialement,
Richard Lazaro.
Les double quotes qui est une chaîne de caractère interprété cad que les variables seront évaluées (entre autre)
Les simple quotes est une chaîne de caractère basique.
Pour plus d'info voir Help about_Quoting_Rules
De cette aide, que je te conseille fortement de lire, voici ce que nous pouvons en tirer :
[code:1]
$pc = PC2334
#$pc = $args
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = 'C:\hosts.xml'}
$xml.wpkg.RemoveChild($xml.SelectSingleNode(\"//host[@name='$pc']\"«»))
$xml.Save('C:\hosts.xml')
[/code:1]
Tu remarqueras la disparition du doublement de la simple quote autour de la valeur car la chaîne est maintenant délimité avec des doubles quotes.
En espérant avoir été clair.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Mouloud
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 13 ans 10 mois #11733
par Mouloud
Réponse de Mouloud sur le sujet Re:Suppression d'un node dans un fichier XML
Oui en effet. C'est en fait de là que venait mon erreur depuis le début. J'ai réessayé un ancien script et en modifiant la syntaxe des quotes ça passe. Je vais appronfondir la chose pour ne plus avoir de problèmes à l'avenir. Ca fait un certains temps que je cherchais...
Connexion ou Créer un compte pour participer à la conversation.
- Mouloud
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 4
- Remerciements reçus 0
il y a 13 ans 10 mois #11735
par Mouloud
Réponse de Mouloud sur le sujet Re:Suppression d'un node dans un fichier XML
Pfff je suis vraiment nul.
J'essaie maintenant de ne pas supprimer tout le noeud host mais juste les noeuds enfants profile id.
Je ne parviens pas à isoler les noeuds enfants en me basant sur l'attribut name de l'hôte...
Donc pour passer de ceci :
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
[code:1]<wpkg>
<host name=\"Pc2096\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
<host name=\"Pc2127\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
<profile id=\"PDFCreator\" />
</host>
<host name=\"Pc2128\" profile-id=\"profile1\" />
<host name=\"Pc2196\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
</wpkg>[/code:1]
à celà :
[code:1]<wpkg>
<host name=\"Pc2096\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
<host name=\"Pc2127\" profile-id=\"Ccleaner\"/>
<host name=\"Pc2128\" profile-id=\"profile1\" />
<host name=\"Pc2196\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
</wpkg>[/code:1]
si on imagine que l'argument passé au script était PC2127.
Je viens vous faire signe si je trouve entre temps.
J'essaie maintenant de ne pas supprimer tout le noeud host mais juste les noeuds enfants profile id.
Je ne parviens pas à isoler les noeuds enfants en me basant sur l'attribut name de l'hôte...
Donc pour passer de ceci :
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
[code:1]<wpkg>
<host name=\"Pc2096\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
<host name=\"Pc2127\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
<profile id=\"PDFCreator\" />
</host>
<host name=\"Pc2128\" profile-id=\"profile1\" />
<host name=\"Pc2196\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
</wpkg>[/code:1]
à celà :
[code:1]<wpkg>
<host name=\"Pc2096\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
<host name=\"Pc2127\" profile-id=\"Ccleaner\"/>
<host name=\"Pc2128\" profile-id=\"profile1\" />
<host name=\"Pc2196\" profile-id=\"Ccleaner\">
<profile id=\"Java\" />
</host>
</wpkg>[/code:1]
si on imagine que l'argument passé au script était PC2127.
Je viens vous faire signe si je trouve entre temps.
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 13 ans 10 mois #11736
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Suppression d'un node dans un fichier XML
Dans ce cas là, il faut parcourir la liste des noeuds enfant (vu qu'on peut en avoir bien plus que un)
J'ai éclaté un peu plus mon code
[code:1]
$pc = 'Pc2127'
$file = 'C:\Users\richardl\Desktop\test.xml'
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = $file}
$nodes = $xml.SelectNodes(\"//host[@name='$pc']/profile\"«»)
$nodes | ForEach-Object {
$xml.SelectSingleNode(\"//host[@name='$pc']\"«»).RemoveChild($_)
}
$xml.Save($file)
[/code:1]
J'ai éclaté un peu plus mon code
[code:1]
$pc = 'Pc2127'
$file = 'C:\Users\richardl\Desktop\test.xml'
$xml = New-Object System.Xml.XmlDocument -Property @{'Load' = $file}
$nodes = $xml.SelectNodes(\"//host[@name='$pc']/profile\"«»)
$nodes | ForEach-Object {
$xml.SelectSingleNode(\"//host[@name='$pc']\"«»).RemoveChild($_)
}
$xml.Save($file)
[/code:1]
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Suppression d'un node dans un fichier XML