我正在编写PowerShell脚本来修改XML文件。我需要添加一个新元素并为其添加属性。我尝试使用CreateElement()
和AppendChild()
方法,但它没有帮助。下面是我的示例输入XML文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Subnet xmlns="http://google.com">
<Id>Network_106</Id>
<Name>Network_106</Name>
<Description>
</Description>
<NetworkAddress>173.24.106.0</NetworkAddress>
<NetworkMask>255.255.255.0</NetworkMask>
</Subnet>
我需要在下面的描述之后添加名为DeliveryServices
的新elemetnt,并在其中添加Id
元素。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Subnet xmlns="http://google.com">
<Id>Network_106</Id>
<Name>Network_106</Name>
<Description>
</Description>
<DeleveryServices>
<Id>172.22.22.22</Id>
</DeleveryServices>
<NetworkAddress>173.24.106.0</NetworkAddress>
<NetworkMask>255.255.255.0</NetworkMask>
</Subnet>
我尝试了下面的代码,但它不起作用。
[xml]$xdoc = Get-Content "F:\Sample.xml"
$child = $xdoc.CreateElement("DeleveryServices")
$xdoc.Subnet.AppendChild($child)
$xdoc.Subnet.DeleveryServices.Id = "172.22.22.22"
我收到以下错误。此外,还在XML文件的末尾创建了DeleveryServices
元素。在描述之后我想要它。
The property 'Id' cannot be found on this object. Verify that the property exists and can be set. At line:44 char:17 + $xdoc.Subnet.DeleveryServices.Id = "172.22.22.22"
答案 0 :(得分:0)
$child = $xdoc.CreateElement("DeleveryServices")
^^^^^^^^^^^^^^^^
$xdoc.Subnet.AppendChild($child)
$xdoc.Subnet.DeliveryServices.Id = "172.22.22.22"
^^^^^^^^^^^^^^^^
请注意DeleveryServices
!= DeliveryServices
答案 1 :(得分:0)
您创建了一个节点<DeleveryService>
,但这只会创建一个空节点。它没有神奇地创建,添加或填充子节点<Id>
。你需要自己做:
[xml]$xdoc = Get-Content "F:\Sample.xml"
$child = $xdoc.CreateElement("DeleveryServices")
$id = $xdoc.CreateElement("Id")
$id.InnerText = '172.22.22.22'
$child.AppendChild($id)
$xdoc.Subnet.AppendChild($child)
要在特定的其他节点之后添加新节点,您需要使用InsertAfter()
而不是AppendChild()
,这显然会将节点放在最后(&#34;追加&#34;)。< / p>
$nsm = New-Object Xml.XmlNamespaceManager($xdoc.NameTable)
$nsm.AddNamespace('ns', $xdoc.DocumentElement.NamespaceURI)
$descr = $xdoc.SelectSingleNode('//ns:Description', $nsm)
$xdoc.Subnet.InsertAfter($child, $descr)
请注意,您需要一个命名空间管理器来选择Description
节点,因为您的XML数据使用命名空间。