J'essaie de créer un élément XML enfant pour ce XML:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
J'utilise ce script PowerShell:
[xml] $doc = Get-Content($filePath)
$child = $doc.CreateElement("newElement")
$doc.configuration.AppendChild($child)
J'ai une erreur: L'appel de la méthode a échoué car [System.String] ne contient pas de méthode nommée 'AppendChild'.
Si vous utilisez la notation pointée pour parcourir un fichier XML (par exemple, $doc.configuration
), Powershell tente d’être intelligent en ce qu’il renvoie.
String
.XmlElement
.Object[]
, Où chaque élément de tableau individuel est à nouveau soumis à ces règles, par exemple. ce sera soit un String
ou un XmlElement
en fonction de son contenu.$null
.Dans votre cas, c'est simple puisque vous souhaitez ajouter des nœuds à l'élément de document:
$doc = New-Object System.Xml.XmlDocument
$doc.Load($filePath)
$child = $doc.CreateElement("newElement")
$doc.DocumentElement.AppendChild($child)
mais vous pouvez utiliser $doc.SelectNodes()
ou $doc.SelectSingleNode()
pour naviguer dans le document XML et toujours avoir un nœud/une liste de nœuds.
On pourrait discuter de la sensibilité de ce comportement, mais en réalité, cela simplifie l'utilisation de XML (structuré de manière rationnelle) - par exemple, la lecture de valeurs à partir d'un fichier de configuration ou d'une réponse d'API. C'est le but de cette syntaxe simple.
Ce n'est pas un bon outil pour créer XML, ce qui est une tâche plus complexe. Utiliser les méthodes de l'API DOM depuis le début est la meilleure approche ici.