2014-02-18 24 views
1

我正在嘗試生成在Powershell中收集的數據的HTML報告。我想最終將HTML鏈接指向表中不同元素的更具體信息。特別是,第一列包含虛擬機的名稱,但這不是特別重要。我試圖用鏈接替換名稱值。在Powershell中使用替換或.replace將TD值更改爲鏈接

for($i=1; $i -le $xml.table.tr.Count-1; $i++){ 
$xml.table.tr[$i].td[0].replace($xml.table.tr[$i].td[0],"<a href=`"http://stackoverflow.com`">myLink</a>") 
} 

    $file = Join-Path C:\users\myname\Documents "VMSpecs.html" 

    ConvertTo-Html -Title "VM Specs" ` 
    -CssUri C:\Users\myname\Documents\style.css ` 
    -Body $($xml.InnerXml) | Out-file $file 


Invoke-item $file 

基於該輸出,的$ xml.table.tr值[$ i]於.td [0]被替換爲鏈接信息,但不會永久。當文件被寫入HTML時,無法找到鏈接信息,並且原始值仍然保存在td el中。所以,大圖片,我想知道如何將鏈接追加到html -fragment在特定的位置。任何樣品或資源都非常有義務。

+0

您如何編寫結果? –

+0

目前它打印每個td [0]的控制檯鏈接...如果我添加$ xml.table.tr [$ i] .td [0] =之前調用替換沒有輸出到控制檯也$ xml.table.tr [$ i] .td [0]不會更改 –

+0

請提供更多代碼... –

回答

1

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],"<a href=`"http://stackoverflow.com`">myLink</a>") 
} 

雖然在這個特殊情況下,似乎根本沒有任何需要替換。既然你要替換的TD的全部內容,只是直接分配給它:

for($i=1; $i -le $xml.table.tr.Count-1; $i++){ 
    $xml.table.tr[$i].td[0] = "<a href=`"http://stackoverflow.com`">myLink</a>" 
} 

最初我誤解你的問題爲約取代,而不是分配給一個節點。它看起來像你上面得到一個特定的元素時,PowerShell將它轉換爲一個字符串,所以你實際上並沒有更新節點。試試這個:

for($i=1; $i -le $xml.table.tr.Count-1; $i++){ 
    ($xml.table.tr[$i].GetElementsByTagName("td") | Select-Object -First 1)."#text" = "<a href=`"http://stackoverflow.com`">myLink</a>" 
} 

「#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) 
} 
+0

是的,我也試過這個,但仍然只是td的初始內容仍然存在HTML調用後... –

+0

即時通訊實現直接分配不工作在所有,也許這是我的問題的根源,即$ xml.table.tr [$ i] .td [0] =「任何東西」只是不工作;內容保持不變。 –

+0

我剛更新了我的答案。 – KevinD