2012-01-23 102 views
0

這應該是相當容易完成的,但我在編寫PowerShell腳本來編輯由HP的團隊軟件導出功能生成的XML文件時遇到了問題。我認爲這個問題來自於創建只有內容是子元素的元素。沒有InnerText的Powershell XML解析問題?

我在錯誤的地方苦苦追趕AppendChild,InnerTexts在vlan元素下是空的。有人可以幫助我使用必要的powershell xml來完成將這4行xml添加到下面的team.xml中嗎?

<vlan> 
    <property id='VlanId' value='3'/> 
    <property id='VlanName' value='MISC'/> 
</vlan> 

這裏是team.xml的縮寫內容:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<teamingconfig> 
<version UtilityVersion='9.90.0.17' ScriptVersion='3.1'/> 
<!-- <team> element 1 --> 
<team relnics='1 2'> 
<property id='TeamName' value='HP Network Team #1'/> 
<property id='OpMode' value='FailOnFault'/> 
<!-- <vlan> element 1 --> 
<vlan> 
     <property id='VlanId' value='1'/> 
     <property id='VlanName' value='MGMT'/> 
</vlan> 
    <!-- <vlan> element 2 --> 
<vlan> 
     <property id='VlanId' value='2'/> 
     <property id='VlanName' value='APPS'/> 
</vlan> 
</team> 
</teamingconfig> 

很抱歉的多個edits- 得到了我想要的東西。語法有點strange-

$vlan2=$xml.SelectSingleNode("//property[@value='407'] [@id='VlanId']") 
$vlan2.value="100" 

新問題,怎麼來的,如果我在我的腳本的頂部添加一行:

write-host "Num Args:" $args.length 

,然後通過PS1一個變量,它似乎惹SelectSingleNode表示system.object []不包含名爲selectsinglenode的方法?我沒有用args觸摸$ xml變量。我基本上只是想讓vlanid成爲一個命令行參數。我試着做一個函數並使用參數,但它會產生與代碼相同的問題。

知道了 - $ xmldata = xml 感謝所有!

+1

你可以發佈你已經寫了PowerShell的? – MrKWatkins

回答

2

您可以克隆一個,並將其添加回:

$vlan = $xml.SelectSingleNode("//vlan").clone() 
$vlan.property[0].value = "3" 
$vlan.property[1].value = "MISC" 
[void]$xml.SelectSingleNode("//team").AppendChild($vlan) 
$xml.save("test.xml") 
+0

這很好,因爲它完全回答我的問題。它帶來了一個新問題,我需要一種可靠的方法來將vlanID 1/MGMT編輯爲不同的ID /名稱,因爲這將成爲克隆的「模板」。 – rismoney

+1

@ user1165300 - 是的,這就是您的示例x​​ml顯示的內容。告訴我們你試過了什麼,或者修改上面的那個。你現在應該有一些想法。用你試過的東西編輯你的問題,我會更新我的答案。 – manojlds

+0

@ user1165300 - 您必須將「SelectSingleNode」的輸出分配給一個變量並設置其屬性。 – manojlds