2015-12-21 76 views
1

我在XML文檔中有多個端點,我試圖替換一些地址字符串。我不想在整個文檔中僅替換端點中的相同文本。所以我試圖縮小範圍,嘗試不同的方法,但我無法實現它。替換XML文件中多個元素的文本

這是我最近的嘗試。我在這裏錯過了一件非常明顯的事情嗎?

$xmlDoc = [XML](Get-Content "$path\filename.exe.config") 

foreach ($i in $xmlDoc.configuration.'system.serviceModel'.client.endpoint) { 
    if ($i.address -match "bla") { 
    $i.address -replace "bla", "foo" 
    } 
} 

$xmlDoc.Save("$path\filename.exe.config") 
+1

'-Replace'沒有副作用,如改變左操作數的值。它只是返回結果值。 – PetSerAl

回答

2

什麼@PetSerAl是想告訴你的是,-replace運營商不更新address節點。您需要將修改後的值分配回節點,以實際更改XML數據。另外,根據XML的結構,點符號可能不適用於您(如果父節點包含多個地址節點,則$i將包含這些節點的列表)。我建議使用帶有XPath表達式的SelectNodes()以保證安全。

foreach ($addr in $xmlDoc.SelectNodes('/configuration/system.serviceModel/client/endpoint/address')) { 
    $addr.'#text' = $addr.'#text' -replace 'bla', 'foo' 
} 
+0

謝謝你。 它找不到#text,但我調整了你提供給 foreach($ addr in xmlDoc.SelectNodes('/ configuration/system.serviceModel/client/endpoint')){ $ addr.address = $ addr。地址-replace'bla',「foo」 } 已經完成了這項工作。 再次感謝 – Jinx