.Net xml importnode的问题

时间:2009-08-04 13:49:59

标签: .net xml powershell

我试图构建一个使用某些XML的powershell脚本。我有一个XML文档,我尝试使用电子邮件地址添加一些值。完成的xml文档应具有以下格式: (我只在这里展示xml的相关部分)

<emailAddresses> 
    <value>bob@bob.com</value> 
    <value>kenny@bob.com</value> 
    <value>roger@bob.com</value> 
</emailAddresses> 

所以,在powershell中,我尝试将此作为测试,但失败了:

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

经过一番阅读后,我发现如果我这样做,它会成功:

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

所以,我被卡住了。当我有几个具有相同名称但值不同的键时,我开始怀疑是否应该使用另一个函数而不是importnode。

你们现在可能已经想到了,我不是xml的专家。非常感谢!

2 个答案:

答案 0 :(得分: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 )

这应该呈现您正在寻找的结果。

答案 1 :(得分:0)

尝试这种方法:

PS> $xml = [xml]'<addresses/>'
PS> $newNode = $xml.CreateElement('value')
PS> $newNode.InnerText = 'bob@bob.com'
PS> $xml.DocumentElement.AppendChild($newNode) > $null
PS> $newNode = $xml.CreateElement('value')
PS> $newNode.InnerText = 'johnny@bob.com'
PS> $xml.DocumentElement.AppendChild($newNode) > $null
PS> $xml.DocumentElement.OuterXml
<addresses><value>bob@bob.com</value><value>johnny@bob.com</value></addresses>