【问题标题】:replace keyword within html string替换html字符串中的关键字
【发布时间】:2010-01-13 12:11:30
【问题描述】:

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

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

如果 html 块完全分布在关键字中,上述方法将正常工作。

例如。

<b>[CustomerName]</b>

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

例如

<b>[Customer</b>Name]

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

【问题讨论】:

  • 如何在关键字内设置部分 HTML 格式?当替换这样一个关键字时,不可能猜测 HTML 格式应该放在替换文本中的什么位置。
  • 我试图创建的函数被传递了一个 html 字符串给它。它来自一个基本的 html 编辑器,它允许用户将样式块应用于任意数量的字符。这允许关键字的一部分具有样式的可能性。看起来问题目前无法解决,应将注意力集中在考虑字符串最初是如何创建的,以消除发生这种情况的可能性。
  • 您使用什么语言编写函数?尽管您必须使用它们的语法,但有许多 HTML 模板引擎可以让这变得简单。
  • 对不起,我刚刚意识到我没有在原始帖子中包含我使用的语言。我正在使用 VB.net。从一些谷歌搜索建议我可以使用 System.Xml?我不确定我会怎么做?

标签: html vb.net string replace keyword


【解决方案1】:

尝试使用正则表达式。在此处创建您的表达式,我使用了它并且效果很好。

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

【讨论】:

【解决方案2】:

如果您使用 javascript 访问内容,请使用 text 属性而不是 innerHTML。这应该从内容中删除所有标签,您返回客户姓名的干净文本表示。

例如,如果内容如下所示:

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

然后访问它的文本属性给出:

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);

然后替换或做任何事情!

【讨论】:

    【解决方案3】:

    我找到了我认为可以解决此问题的方法。好吧,在我的场景中它正在工作。

    已对 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
    

    感谢您的所有意见。我很高兴能找到解决问题的办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 2020-03-14
      • 2011-06-13
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2014-12-22
      相关资源
      最近更新 更多