没有InnerText的Powershell XML解析问题?

时间:2012-01-23 16:18:05

标签: xml powershell scripting

这应该很容易实现,但是我在编写PowerShell脚本以编辑由HP的组合软件导出功能生成的XML文件时遇到问题。我认为问题源于创建只有内容是子元素的元素。

我在错误的位置挣扎着AppendChild,而且在vlan元素下,InnerTexts是空的。有人可以帮助我使用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>

对于多次修改感到抱歉 - 得到了我想要的东西。语法有点奇怪 -

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

新问题,如果我在脚本顶部添加一行代码,该怎么办:

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

然后传递ps1一个变量,似乎搞乱了SelectSingleNode,说system.object []不包含名为choicesinglenode的方法?我没有用args触及$ xml变量。我基本上试图让vlanid成为一个命令行参数。我试过制作一个函数并使用param,但它会产生与代码相同的问题。

得到它 - $ xmldata = xml 谢谢大家!

1 个答案:

答案 0 :(得分: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")