Both .Replace and -replace產生一個新的字符串。你想要做的是重新分配結果:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$xml.table.tr[$i].td[0] = $xml.table.tr[$i].td[0].replace($xml.table.tr[$i].td[0],"myLink")
}
雖然在這個特殊情況下,似乎根本沒有任何需要替換。既然你要替換的TD的全部內容,只是直接分配給它:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$xml.table.tr[$i].td[0] = "myLink"
}
最初我誤解你的問題爲約取代,而不是分配給一個節點。它看起來像你上面得到一個特定的元素時,PowerShell將它轉換爲一個字符串,所以你實際上並沒有更新節點。試試這個:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
($xml.table.tr[$i].GetElementsByTagName("td") | Select-Object -First 1)."#text" = "myLink"
}
「#text」屬性可能會有所不同,我不確定。我用一個非常簡單的HTML文件做了一個測試,並且通過在生成的XML對象的每個級別上執行Get-Member,我發現這是我需要更新的屬性。
嗯......好的,試試這個。創建一個包含該鏈接的新XML元素,並將其附加到td元素:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$link = $xml.CreateElement("a")
$link.SetAttribute("href", "http://stackoverflow.com")
$link.InnerText = "myLink"
$xml.table.tr[$i].FirstChild."#text" = ""
$xml.table.tr[$i].FirstChild.AppendChild($link)
}