vb.net:搜索和替换字符串忽略HTML标记

时间:2014-06-20 17:08:52

标签: html vb.net

我有一个在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>

2 个答案:

答案 0 :(得分:0)

这是不可能的,因为它创造了一个ambuguity。你搜索字符串是2个不同的HTML标签。你的替换字符串如何告诉哪个部分在哪个标记中。 即使在任何编辑器中,你都会发现同样的事情。 试着这样做。

  • 创建html文件并将其复制到其中。
  • 在浏览器中打开您的html文件
  • 复制文本并将其粘贴到ms字样中(它应保留格式,两个文本都有自己的字体大小.18和16)
  • 使用ms word的替换功能将文本替换为“1.2 Request Development”

你会看到两个文字现在都是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