如何从.NET中的标签中提取文本内容?

时间:2012-05-17 15:12:39

标签: html vb.net string parsing split

我正在尝试编写vb.net函数来从标记中提取特定的文本内容;我写了这个函数

Public Function GetTagContent(ByRef instance_handler As String, ByRef start_tag As String, ByRef end_tag As String) As String
    Dim s As String = ""
    Dim content() As String = instance_handler.Split(start_tag)
    If content.Count > 1 Then
        Dim parts() As String = content(1).Split(end_tag)
        If parts.Count > 0 Then
            s = parts(0)
        End If
    End If
    Return s
End Function

但它不起作用,例如使用以下调试代码

    Dim testString As String = "<body>my example <div style=""margin-top:20px""> text to extract </div> <br /> another line.</body>"

    txtOutput.Text = testString.GetTagContent("<div style=""margin-top:20px"">", "</div>")

我只获得“body&gt; my example”字符串,而不是“text to extract”

谁能帮助我吗? tnx提前


我编写了一个新的例程,下面的代码可以工作但是我知道是否存在更好的性能代码:

    Dim s As New StringBuilder()
    Dim i As Integer = instance_handler.IndexOf(start_tag, 0)
    If i < 0 Then
        Return ""
    Else
        i = i + start_tag.Length
    End If
    Dim j As Integer = instance_handler.IndexOf(end_tag, i)
    If j < 0 Then
        s.Append(instance_handler.Substring(i))
    Else
        s.Append(instance_handler.Substring(i, j - i))
    End If
    Return s.ToString

1 个答案:

答案 0 :(得分:2)

XPath是完成此任务的一种方法。我相信其他人会建议LINQ。以下是使用XPath的示例:

Dim testString As String = "<body>my example <div style=""margin-top:20px""> text to extract </div> <br /> another line.</body>"
Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(testString)
MessageBox.Show(doc.SelectSingleNode("/body/div").InnerText)

显然,更复杂的文档可能需要比简单"/body/div"更复杂的xpath,但它仍然非常简单。

如果您需要获取与路径匹配的多个元素的列表,可以使用doc.SelectNodes