2010-01-13 104 views
0

我正在尋找一種方法,用一個變量替換html字符串中的關鍵字。此刻,我正在使用以下示例。替換html中的關鍵字字符串

returnString = Replace(message, "[CustomerName]", customerName, CompareMethod.Text) 

如果html塊完全跨關鍵字傳播,上述方法將正常工作。

例如。

<b>[CustomerName]</b> 

但是,如果關鍵字的格式在整個單詞中被拆分,則字符串不會被替換。

例如

<b>[Customer</b>Name] 

字符串的格式不在我的控制之下,並非萬無一失。考慮到這一點,什麼是在html字符串中查找關鍵字的最佳方法?

+1

如何在關鍵字中部分使用HTML格式?當替換這樣的關鍵字時,不可能猜測HTML格式應該放置在替換文本中的什麼位置。 – Veger 2010-01-13 12:40:41

+0

我正在嘗試創建的函數通過一個html字符串傳遞給它。它來自一個基本的HTML編輯器,它有可能允許用戶將樣式塊應用於任意數量的字符。這可以讓關鍵字片段具有一種風格。看起來好像這個問題在這一點上是不可解的,應該把注意力集中在考慮如何創建字符串,以消除這種情況發生的可能性。 – 53an 2010-01-13 12:58:17

+0

你用什麼語言編寫函數?有很多HTML模板引擎可以使這個變得簡單,但你必須使用它們的語法。 – 2010-01-13 13:02:59

回答

0

我發現我認爲是解決這個問題的方法。那麼在我的情況下,它正在工作。

html輸入已經過調整,將每個自定義字段或關鍵字放置在一個帶有集合ID的div內。我使用mshtml遍歷了html字符串中的所有元素,並在找到匹配項時將內部文本設置爲正確的值。

例如

Function ReplaceDetails(ByVal message As String, ByVal customerName As String) As String 
    Dim returnString As String = String.Empty 
    Dim doc As IHTMLDocument2 = New HTMLDocument 
    doc.write(message) 
    doc.close() 
    For Each el As IHTMLElement In doc.body.all 
     If (el.id = "Date") Then 
      el.innerText = Now.ToShortDateString 
     End If 
     If (el.id = "CustomerName") Then 
      el.innerText = customerName 
     End If 
    Next 
    returnString = doc.body.innerHTML 
    return returnString 

感謝您的所有輸入。我很高興能解決這個問題。

+0

這很好..你應該標記你的解決方案作爲答案 – Anurag 2010-01-15 03:40:07

0

嘗試使用正則表達式。在這裏創建你的表達式,我用這個,它運作良好。

http://regex-test.com/validate/javascript/js_match

+0

你是否打算用正則表達式解析HTML? http://stackoverflow.com/questions/1732348/#1732454 – 2010-01-13 13:04:34

0

使用,如果您使用JavaScript來訪問該內容的文本屬性而不是innerHTML的。這應該刪除內容中的所有標籤,您將給出客戶名稱的乾淨文本表示。

例如,如果內容是這樣的:

<div id="name"> 
    <b>[Customer</b>Name] 
</div> 

然後訪問它的Text屬性給出:

var name = document.getElementById("name").text; 
// sets name to "[CustomerName]" without the tags 

這應該是易於加工。如果需要,請立即搜索regex

編輯:由於您正在服務器端執行此處理,因此將遞歸處理XML並收集每個節點的文本元素。由於我對VB.Net並不是很大,下面是一些僞代碼:

getNodeText(node) { 
    text = "" 
    for each node.children as child { 
     if child.type == TextNode { 
      text += child.text 
     } 
     else { 
      text += getNodeText(child); 
     } 
    } 
    return text 
} 

myXml = xml.load(<html>); 
print getNodeText(myXml); 

然後替換或者做任何事情!