Question [XML] Modification de valeurs XML

Plus d'informations
il y a 13 ans 2 semaines #14195 par Christophe Bach
Bonjour à tous,

J'ai un petit problème avec l’édition de fichiers XML.
Je vais vous présenter le fichier XML et ensuite le code PowerShell.

Le but est de modifier des valeurs, dans le cas présent, le nom d'un serveur dans un fichier XML.

(Je m'excuse mais je n'ai pas le bon vocabulaire pour la gestion du XML et je suis encore nouveau dans le PowerShell)

Server.xml
[code:1]<objs>
<servers>
<Server>
<Id>1</Id>
<Name>Server-01</Name>
</Server>
<Server>
<Id>2</Id>
<Name>Server-02</Name>
</Server>
<Id>3</Id>
<Name>Server-test-03</Name>
</Server>
</servers>
</objs>[/code:1]

Script.ps1
[code:1]
$xml = New-Object -TypeName XML
$xml.Load( \"C:\Scripts\Xml\Server.xml\" )

$xml.objs.servers.server.Name[2] = \"Server-03\" ##Ne fonctionne pas, car la variable ne prend pas la valeur.

$xml.Save( \"C:\Scripts\Xml\Server.xml\" )
[/code:1]

J'ai testé pas mal de combinaison mais là, je sèche.

PS : Si vous avez de la bonne documentation sur le sujet, je suis preneur ^^.

Merci d'avance.

Message édité par: Christophe Bach, à: 6/03/13 10:31<br><br>Message édité par: Christophe Bach, à: 6/03/13 10:32

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14197 par Arnaud Petitjean
Bonjour Christophe,

A mon avis plutôt que de se compliquer la vie à manipuler du XML, je considérerais déjà le fait que ton fichier est un fichier texte. Ainsi il est facile de remplacer une valeur par une autre...

Exemple:
[code:1]
# Chargement du fichier XML
$contenu = Get-Content ./config.xml

# Remplacement d'une valeur par une autre
$contenu = $contenu -replace 'Server-01','Server-1001'

# Remplacement du fichier XML
$contenu | Out-file ./config.xml -Encoding Unicode
[/code:1]

Attention à l'encodage choisi car les fichier XML sont très sensibles à ce point. En effet, un fichier XML qui se respecte possède une ligne d'entête indiquant son encodage.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14200 par Christophe Bach
Bonjour Arnaud,

je voulais juste citer un exemple car mon XLM fait plus de 300 lignes avec des valeurs dans tout les sens ^^'. Et le Script PowerShell fait des changements de valeur selon moult conditions.

Je voudrais le structurer correctement, car ce n'est pas très corporate.

Je suis un \&quot;noob\&quot; en XML ^^.
Pour l'encodage j'ai choisie, un peu par défaut l'UTF-8 :
&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;

PS : La gestion en fichier texte marche parfaitement, mais est-ce la façon la plus \&quot;propre\&quot; de le faire ? (je suis chiant mais j'aime apprendre et découvrir ^^)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14201 par Arnaud Petitjean
Si tu utilises de bonnes expressions régulières pour capturer la chaîne à modifier il n'y a pas de problème.

Ceci étant pour tout problème il n'y a jamais qu'une seule solution. Mais je te l'accorde manipuler directement le XML en mémoire sera plus joli...

Après il faut trouver le bon compromis entre le temps passé à résoudre un problème et la beauté de la solution :lol:.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14217 par Christophe Bach
Merci en tout cas pour ton aide, j'ai réussie à gérer mon problème :)

Mais je vais quand même chercher comment faire une gestion du XML (j'aime pas rester sur un demi victoire ^^)

Have a nice day ;)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.071 secondes
Propulsé par Kunena