在html字符串中替换关键字

时间:2010-01-13 12:11:31

标签: html vb.net string replace keyword

我正在寻找一种用变量替换html字符串中的关键字的方法。目前我正在使用以下示例。

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

如果html块完全遍布关键字,则上述方法可以正常工作。

例如

<b>[CustomerName]</b>

但是,如果关键字的格式在整个单词中被分割,则找不到该字符串,因此不会被替换。

e.g。

<b>[Customer</b>Name]

字符串的格式不受我的控制,并非万无一失。考虑到这一点,在html字符串中查找关键字的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

尝试使用Regex表达式。在这里创建表达式,我使用它并且效果很好。

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

答案 1 :(得分:0)

如果您使用javascript访问内容,请使用text属性而不是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);

然后替换或做任何事情!

答案 2 :(得分:0)

我发现了我认为解决这个问题的方法。在我的方案中,它正在发挥作用。

调整了html输入,将每个自定义字段或关键字放在具有设置ID的div中。我使用mshtml循环遍历html字符串中的所有元素,并在找到匹配项时将内部文本设置为正确的值。

e.g。

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

感谢所有的输入。我很高兴有解决问题的方法。