我试图构建一个使用某些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的专家。非常感谢!
答案 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>