2016-10-11 1 views
0

J'écris un script PowerShell pour modifier le fichier XML. Je dois ajouter un nouvel élément et ajouter des attributs. J'ai essayé d'utiliser les méthodes CreateElement() et AppendChild() mais cela n'aide pas. Ci-dessous le fichier XML d'entrée mon exempleAjouter un élément XML au milieu du document XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Subnet xmlns="http://google.com"> 
    <Id>Network_106</Id> 
    <Name>Network_106</Name> 
    <Description> 
    </Description> 
    <NetworkAddress>173.24.106.0</NetworkAddress> 
    <NetworkMask>255.255.255.0</NetworkMask> 
</Subnet> 

Je dois ajouter le nouveau elemetnt appelé DeliveryServices après une description comme ci-dessous et ajoutez élément Id à l'intérieur.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Subnet xmlns="http://google.com"> 
    <Id>Network_106</Id> 
    <Name>Network_106</Name> 
    <Description> 
    </Description> 
<DeleveryServices> 
    <Id>172.22.22.22</Id> 
</DeleveryServices> 
    <NetworkAddress>173.24.106.0</NetworkAddress> 
    <NetworkMask>255.255.255.0</NetworkMask> 
</Subnet> 

J'ai essayé le code ci-dessous, mais cela ne fonctionne pas.

[xml]$xdoc = Get-Content "F:\Sample.xml" 
$child = $xdoc.CreateElement("DeleveryServices") 
$xdoc.Subnet.AppendChild($child) 
$xdoc.Subnet.DeleveryServices.Id = "172.22.22.22" 

Je reçois cette erreur ci-dessous. Et aussi l'élément DeleveryServices est créé à la fin du fichier XML. Je le veux après la description.

The property 'Id' cannot be found on this object. Verify that the property 
exists and can be set. 
At line:44 char:17 
+     $xdoc.Subnet.DeleveryServices.Id = "172.22.22.22"
+0

_ "Cela ne fonctionne pas" _ est insuffisant. Expliquez ce qui se passe, affichez la sortie réelle et incluez les messages d'erreur. –

+0

@JimGarrison a ajouté des détails d'erreur. –

+0

Je ne vois aucun noeud '' dans le fichier XML. Vous ne pouvez pas définir un attribut sur un noeud inexistant. –

Répondre

0

Vous créez un nœud <DeleveryService>, mais qui crée juste un noeud vide. Il ne crée pas, n'ajoute ou ne remplit pas par magie un nœud enfant <Id>. Vous devez faire vous-même:

[xml]$xdoc = Get-Content "F:\Sample.xml" 
$child = $xdoc.CreateElement("DeleveryServices") 

$id = $xdoc.CreateElement("Id") 
$id.InnerText = '172.22.22.22' 
$child.AppendChild($id) 

$xdoc.Subnet.AppendChild($child) 

Pour ajouter le nouveau nœud après un autre noeud particulier, vous devez utiliser InsertAfter() au lieu de AppendChild(), qui met évidemment le nœud à la fin (« append »).

$nsm = New-Object Xml.XmlNamespaceManager($xdoc.NameTable) 
$nsm.AddNamespace('ns', $xdoc.DocumentElement.NamespaceURI) 

$descr = $xdoc.SelectSingleNode('//ns:Description', $nsm) 

$xdoc.Subnet.InsertAfter($child, $descr) 

Prenez garde que vous avez besoin d'un gestionnaire d'espace de noms pour sélectionner le nœud Description, parce que vos données XML utilise un espace de noms.

0
$child = $xdoc.CreateElement("DeleveryServices") 
           ^^^^^^^^^^^^^^^^ 
$xdoc.Subnet.AppendChild($child) 
$xdoc.Subnet.DeliveryServices.Id = "172.22.22.22" 
      ^^^^^^^^^^^^^^^^ 

Notez que DeleveryServices! = DeliveryServices

+0

C'est une faute de frappe. Ça ne marche toujours pas. Montrant la même erreur. –

+0

Que diriez-vous de '$ child.Id =" 172.22.22.22 "' –