2009-08-04 6 views
1

Je tente de construire un script PowerShell qui utilise du XML. J'ai un document XML où j'essaie d'ajouter des valeurs avec des adresses email. Le document XML fini doit avoir ce format: (je ne montrant que la partie pertinente du xml ici)problème avec .Net xml importnode

<emailAddresses> 
    <value>[email protected]</value> 
    <value>[email protected]</value> 
    <value>[email protected]</value> 
</emailAddresses> 

SO, en Powershell je tente de le faire comme un test qui échoue:

$newNumber = [xml] '<value>555-1215</value>' 
$newNode = $Request2.ImportNode($newNumber.value, $true) 
$emailnode.AppendChild($newNode) 

Après quelques lectures, j'ai compris que si je fais cela, il proprement déroulée:

$newNumber = [xml] '<value name="flubber">555-1215</value>' 
$newNode = $Request2.ImportNode($newNumber.value, $true) 
$emailnode.AppendChild($newNode) 

donc, je suis coincé. Je commence à me demander si je devrais utiliser une autre fonction à la place d'importnode quand j'ai plusieurs clés avec le même nom mais des valeurs différentes.

Comme vous l'avez probablement déjà compris, je ne suis pas un expert en XML. Toute aide appréciée!

Répondre

2

Comme vous l'avez indiqué, il y a des morceaux de XML qui ont été laissés hors de question. J'ai donc construit mon propre rendu qui, je l'espère, s'adapte à la version real.

Tout d'abord ...

$newNumber.value 

... est de type chaîne. ImportNode() attend un XmlNode comme premier paramètre. Pour obtenir ceci, vous pouvez probablement appeler une fonction comme get_DocumentElement() et/ou SelectSingleNode().

Par exemple:

$Request2 = [xml]'<root><emailAddresses/></root>' 
$newNumber = [xml]'<value>555-1215</value>' 
$newNode = $Request2.ImportNode($newNumber.get_DocumentElement(), $true) 
$Request2.get_DocumentElement().SelectSingleNode('./emailAddresses').AppendChild($newNode) 

Cela devrait rendre les résultats que vous recherchez.

0

Essayez cette approche:

PS> $xml = [xml]'<addresses/>' 
PS> $newNode = $xml.CreateElement('value') 
PS> $newNode.InnerText = '[email protected]' 
PS> $xml.DocumentElement.AppendChild($newNode) > $null 
PS> $newNode = $xml.CreateElement('value') 
PS> $newNode.InnerText = '[email protected]' 
PS> $xml.DocumentElement.AppendChild($newNode) > $null 
PS> $xml.DocumentElement.OuterXml 
<addresses><value>[email protected]</value><value>[email protected]</value></addresses>