2015-09-17 3 views
0
<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, мне нужно изменить ID5 от O до 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

Почему не использовать 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) 
+0

Удивительно, что сработало! Спасибо за помощь. – micsea64

Смежные вопросы