2010-01-13 106 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); 

然后替换或者做任何事情!