更新XML元素

时间:2016-06-15 14:10:01

标签: xml xml-parsing powershell-v2.0

给出以下XML:

<data>  
   <variable>
    <row>
      <column1>RPS</column>
      <column2>10</column>
    </row>  
  </variable>

  <variable>
    <row>
      <column1>SANTH</column>
      <column2>5000</column>
    </row>  
  </variable> 
</data>

我需要读取值5000并需要替换一些随机数。我没有任何线索。下面从net复制的代码。它没有按照我的要求工作。

$variable = Get-Random

[xml]$xml = Get-Content D:\test.xml
$xml.data.variable.row.ChildNodes.Item(1)."#text" = "$variable" // failing  here 
$xml.Save('D:\test.xml')

另外,请告诉我如何通过给出元素名称而不是给出索引值来访问column2。

1 个答案:

答案 0 :(得分:0)

您的XML数据有多个<variable>节点,因此$xml.data.variable会生成一个节点列表。 PowerShell v2不透明地展开列表/数组以允许访问每个元素的成员。相反,您正在尝试访问row个节点数组的(不存在的)属性<variable>

如果要修改第二个<column2>节点的<variable>子节点,这应该有效:

$xml.data.variable[1].row.column2 = "$variable"

如果要修改值为5000的子节点(无论其位置如何),最好使用XPath表达式:

$xml.SelectSingleNode("//column2[text()='5000']").'#text' = "$variable"