2009-08-04 37 views
1

我試圖構建一個使用某些XML的PowerShell腳本。我有一個XML文檔,我嘗試在電子郵件地址中添加一些值。成品XML文檔應該有這樣的格式: (我只顯示這裏的XML相關的部分)問題.Net xml importnode

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

所以,在PowerShell中我嘗試這樣做的測試,它失敗:

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

一些閱讀後,我想通了,如果我這樣做,它suceeds:

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

所以,我堅持。當我有幾個具有相同名稱但不同值的鍵時,我開始懷疑是否應該使用另一個函數而不是importnode。

正如你們大概現在已經想通了,我不是xml專家。任何幫助表示讚賞!

回答

2

正如你所指出的,有些XML已經被排除在問題之外,所以我構建了自己的演繹,希望能夠適應現實世界版本。

首先...

$newNumber.value 

...是字符串類型。 ImportNode()預期XmlNode類型作爲第一個參數。爲了得到這個,你可以調用一個函數,如get_DocumentElement()和/或SelectSingleNode()

例如:

$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) 

這應該渲染你正在尋找的結果。

0

試試這個辦法:

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>