2016-10-11 19 views
0

XMLファイルを変更するPowerShellスクリプトを作成しています。私は新しい要素を追加し、その要素に属性を追加する必要があります。私はCreateElement()AppendChild()メソッドを使ってみましたが、それは役に立たないです。以下は私のサンプル入力XMLファイルには、私は以下のように説明した後DeliveryServicesと呼ばれる新しいelemetntを追加し、その中Id要素を追加する必要がXML文書の途中に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> 

です。

<?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" 

このエラーは以下のとおりです。また、DeleveryServices要素がXMLファイルの最後に作成されます。私は説明の後にそれが欲しい。

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

@ジムガリソンはエラーの詳細を追加しました。 –

+0

XMLのどこにでもノードはありません。存在しないノードに属性を設定することはできません。 –

答えて

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()を、使用する必要がある特定の他のノードの後に​​新しいノードを追加します。

$nsm = New-Object Xml.XmlNamespaceManager($xdoc.NameTable) 
$nsm.AddNamespace('ns', $xdoc.DocumentElement.NamespaceURI) 

$descr = $xdoc.SelectSingleNode('//ns:Description', $nsm) 

$xdoc.Subnet.InsertAfter($child, $descr) 

XMLデータが名前空間を使用していますので、あなたは、Descriptionノードを選択するための名前空間の管理を必要とすることに注意してください。

0
$child = $xdoc.CreateElement("DeleveryServices") 
           ^^^^^^^^^^^^^^^^ 
$xdoc.Subnet.AppendChild($child) 
$xdoc.Subnet.DeliveryServices.Id = "172.22.22.22" 
      ^^^^^^^^^^^^^^^^ 

注意DeleveryServicesこと!= DeliveryServices

+0

そのタイプミス。まだそれは動作しません。同じエラーを示しています。 –

+0

'$ child.Id =" 172.22.22.22 "' –

関連する問題