我有一个在VB.net中开发的桌面应用程序。它允许用户从数据库中检索HTML文件并进行编辑。
问题:如何在忽略HTML标记的HTML文件中搜索和替换字符串。什么是最好的方法。有没有人回答类似的问题?谢谢你的帮助。
实施例: HTML文件的一部分:
<h2 style="margin: 26pt 0pt 8pt;">
<span style="color: #e36c0a; font-family: Helvetica; font-size: 18pt; font-style: normal; font-weight: bold"> 1.1</span><span style="color: #e36c0a; font-family: Helvetica; font-size: 16pt; font-weight: bold"> Request Process</span></a></h2>
搜索:'1.1申请流程'
替换:'1.2请求开发'
结果:
<h2 style="margin: 26pt 0pt 8pt;">
<span style="color: #e36c0a; font-family: Helvetica; font-size: 18pt; font-style: normal; font-weight: bold"> 1.2</span><span style="color: #e36c0a; font-family: Helvetica; font-size: 16pt; font-weight: bold"> Request Development'</span></a></h2>
答案 0 :(得分:0)
这是不可能的,因为它创造了一个ambuguity。你搜索字符串是2个不同的HTML标签。你的替换字符串如何告诉哪个部分在哪个标记中。 即使在任何编辑器中,你都会发现同样的事情。 试着这样做。
你会看到两个文字现在都是18磅。根据我的理解,你希望保留他们个人的字体大小,这是不可能的。
即使与单词相同也需要正则表达式或者可能使用一些开发的库。
答案 1 :(得分:0)
您要实现的是HTML解析。有很多方法可以做到这一点,这里有一个使用MSHTML和DOM的简单例子:
你必须先:
Imports mshtml
然后声明一个字符串变量(例如myHTML)并将所有HTML放在那里。然后调用 parseMyHtml 方法。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim myHTML As String = "<title>hello world!</title><h2 style=""margin: 26pt 0pt 8pt;""><span style=""color: #e36c0a; font-family: Helvetica; font-size: 18pt; font-style: normal; font-weight: bold""> 1.1</span><span style=""color: #e36c0a; font-family: Helvetica; font-size: 16pt; font-weight: bold""> Request Process</span></a></h2>"
Response.Write(parseMyHtml(myHTML))
End Sub
您必须聪明并自定义 parseMyHtml 方法才能执行您喜欢的操作。请注意我正在寻找所有SPAN标记并替换它们的 innerText :
Function parseMyHtml(ByVal htmlToParse$) As String
Dim htmlDocument As IHTMLDocument2 = New HTMLDocumentClass()
htmlDocument.write(htmlToParse)
htmlDocument.close()
Dim allElements As IHTMLElementCollection = htmlDocument.body.all
Dim allSpanTags As IHTMLElementCollection = allElements.tags("span")
Dim element As IHTMLElement
For Each element In allSpanTags
element.innerText = element.innerText.Replace("1.1", "1.2")
element.innerText = element.innerText.Replace("Process", "Development")
Next
Return htmlDocument.body.innerHTML
End Function