我正在寻找一种用变量替换html字符串中的关键字的方法。目前我正在使用以下示例。
returnString = Replace(message, "[CustomerName]", customerName, CompareMethod.Text)
如果html块完全遍布关键字,则上述方法可以正常工作。
例如
<b>[CustomerName]</b>
但是,如果关键字的格式在整个单词中被分割,则找不到该字符串,因此不会被替换。
e.g。
<b>[Customer</b>Name]
字符串的格式不受我的控制,并非万无一失。考虑到这一点,在html字符串中查找关键字的最佳方法是什么?
答案 0 :(得分:0)
尝试使用Regex表达式。在这里创建表达式,我使用它并且效果很好。
答案 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
感谢所有的输入。我很高兴有解决问题的方法。