节点选择和替换

时间:2015-09-17 18:37:27

标签: xml powershell

<XMLFile>
  <Pattern Pattern="1">
    <ID1>10</ID1>
    <ID2>2</ID2>
    <ID3>01_1</ID3>
    <ID4>01_1_SOTR_SOTR</ID4>
    <ID5>O</ID5>
   </Pattern>
</XMLFile>

我正在尝试在XML文件中搜索一组条件。在这种情况下,我正在寻找ID1 = 10,每当我找到ID1 = 10时,我都需要将ID5O更改为L。 (顺便提一下,我还有几百个节点块可以改变。)

所以我可以用以下内容搜索我的病情:

$_XMLFile = [xml] (Get-Content $_XMLFilePath)

$nodes = $_XMLFile.XMLFile.Pattern | % {$_.ID1 -eq '10'} |
         Select-Object -Property ID5

我遇到的问题是,一旦我有了节点列表,就会改变ID5

我试过了

foreach ($node in $nodes) {
    $nodes | % {$_.ID5 -replace "O", "L"}
}

1 个答案:

答案 0 :(得分:1)

为什么不使用XPath来查找节点列表?

$xmlDoc = New-Object -TypeName System.Xml.XMLDocument
$xmlDoc.Load($fileName)
[System.Xml.XmlNodeList]$nodeList = $xmlDoc.SelectNodes('XMLFile/Pattern[ID1=10]/ID5')
foreach ($node in $nodeList) {
    $node.'#text' = 'L'
}

$xmlDoc.Save($newFileName)