使用名称空间添加XML属性

时间:2019-02-21 16:59:51

标签: xml powershell

我试图将元素添加到自动生成的XML文件中,然后可以将其导入回生成器中,但是遇到一些名称空间属性的问题。

这是我要重新创建的内容:

<IP_Filter_Template_Guid dt:dt="string" xmlns:dt="urn:schemas-microsoft-com:datatypes">

这是我正在使用的代码:

$xml = [System.Xml.XmlDocument](Get-Content $xmldoc)

$child1element = $xml.CreateElement($rapname)
$child1element.SetAttribute("name", $rapname)
$child1 = $xml.Root.Children.Microsoft_Internet_Authentication_Service.Children.RadiusProfiles.Children.AppendChild($child1element)

$child2element = $xml.CreateElement("Properties")
$child2 = $child1.AppendChild($child2element)

$child3element1 = $xml.CreateElement("IP_Filter_Template_Guid", $xmlns)
$child3element1.SetAttribute("dt", "urn:schemas-microsoft-com:datatypes", "string")
$child3element1.SetAttribute("dt", "urn:schemas-microsoft-com:xmlns", "urn:schemas-microsoft-com:datatypes")

$child3 = $child2.AppendChild($child3element1)

$child3element1.AppendChild($xml.CreateTextNode("{00000000-0000-0000-0000-000000000000}"))

$xml.Save("c:\xml.xml")

这是元素的输出:

<IP_Filter_Template_Guid d9p1:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string" xmlns:d9p1="urn:schemas-microsoft-com:xmlns">

1 个答案:

答案 0 :(得分:0)

首先将新节点创建为纯XML节点(不需要名称空间管理器):

$node = $xml.CreateElement('IP_Filter_Template_Guid')

使用所需的名称空间创建一个新的属性节点,并为其分配值:

$ns   = 'urn:schemas-microsoft-com:datatypes'
$attr = $xml.CreateAttribute('dt', 'dt', $ns)
$attr.Value = 'string'

使用SetAttributeNode()将属性添加到XML节点( 不是 SetAttribute()!)

$node.SetAttributeNode($attr)

演示:

PS C:\> [xml]$xml = '<root/>'
PS C:\> $node = $xml.CreateElement('IP_Filter_Template_Guid')
PS C:\> $ns = 'urn:schemas-microsoft-com:datatypes'
PS C:\> $attr = $xml.CreateAttribute('dt', 'dt', $ns)
PS C:\> $attr.Value = 'string'
PS C:\> $node.SetAttributeNode($attr) >$null
PS C:\> $node.OuterXml
<IP_Filter_Template_Guid dt:dt="string" xmlns:dt="urn:schemas-microsoft-com:datatypes" />