2012-05-17 61 views
1

我想编码一个vb.net函数从标签中提取特定的文本内容;我写了这个功能如何从.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>") 

我只得到“身体>我的榜样”的字符串,而不是“文字提取”

任何人都可以帮助我吗? 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 
+0

我写了一个新的常规和下面的代码工作不过,我想知道是否存在性能更好的代码: 昏暗译文]新的StringBuilder() 暗淡我作为整数= instance_handler.IndexOf(START_TAG,0) 如果I <0然后 返回 “” 否则 I = I + start_tag.Length 结束如果 昏暗J所示整数= instance_handler.IndexOf(END_TAG,ⅰ) 在j <0,则 s.Append(instance_handler.Substring( i)) Else s.Append(instance_handler.Substring(i,j-i)) End If 返回s.ToString – Max

回答

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

相关问题