1

タグから特定のテキスト コンテンツを抽出する 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>my example」文字列のみを取得します

誰でも私を助けることができますか?事前にt​​nx


私は新しいルーチンを書き、次のコードは機能しますが、パフォーマンスのためのより良いコードが存在するかどうかはわかります:

    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
4

1 に答える 1

2

XPath は、こ​​のタスクを実行する 1 つの方法です。他の人が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)

明らかに、より複雑なドキュメントでは単純な よりも複雑な xpath が必要になる場合がありますが、"/body/div"それでもかなり単純です。

パスに一致する複数の要素のリストを取得する必要がある場合は、 を使用できますdoc.SelectNodes

于 2012-05-17T15:41:33.660 に答える