将元素添加到XML

将元素添加到XML,xml,powershell,powershell-4.0,Xml,Powershell,Powershell 4.0,我想向现有的XML添加一个元素(连接器),这是成功的,但我需要删除xmlns=,并想向它添加一个值。连接器blaat与我的代码一起添加 XML: tcp://xxxxxxx:61616 [xml]$xml=获取内容d:\data\test broker\etc\broker.xml $xml.configuration.core.connectors.connector.ChildNodes.Item(0).value $Node=$xml.CreateElement(“连接器”); $No

我想向现有的XML添加一个元素(连接器),这是成功的,但我需要删除
xmlns=
,并想向它添加一个值。连接器blaat与我的代码一起添加

XML:


tcp://xxxxxxx:61616
[xml]$xml=获取内容d:\data\test broker\etc\broker.xml
$xml.configuration.core.connectors.connector.ChildNodes.Item(0).value
$Node=$xml.CreateElement(“连接器”);
$Node.SetAttribute(“名称”、“blaat”);
$xml.configuration.core.connectors.AppendChild($node)
$xml.configuration.core.connectors.connector.SetValue(“tcp://”);
$xml.Save(“d:\data\test broker\etc\broker.xml”)
我希望XML如下所示:


tcp://xxxx1:61616
tcp://xxxxx2:61616

您的XML数据使用名称空间,因此需要注意这一点。
节点定义了一个应用于其所有子节点的默认命名空间(
xmlns=“urn:activemq:core”
)。创建命名空间管理器并将该命名空间添加到其中:

$nm = New-Object Xml.XmlNamespaceManager $xml.NameTable
$nm.AddNamespace('foo', 'urn:activemq:core')
选择要将新节点附加到的节点:

$cn = $xml.SelectSingleNode('//foo:connectors', $nm)
创建新节点时,请指定其默认名称空间,然后设置节点的属性和值:

$node = $xml.CreateElement('connector', $cn.NamespaceURI)
$node.SetAttribute('name', 'blaat')
$node.InnerText = 'tcp://xxxxx2:61616'
现在,您可以将新节点附加到预期的父节点,而不会获得虚假的
xmlns
属性:

[void]$cn.AppendChild($node)