如何在輸入元素之前獲取標籤的內部文本?

html-agility-pack vb.net

我的應用程序正在使用htmlagility包。截至目前,我可以獲取表單上的所有輸入元素。問題是我通過ID獲取所有輸入元素。我試圖將其縮小到只給我一個ID的表單的輸入元素,在每個輸入元素之前包含精確的內部文本標籤。

例:

<label for="email">Email Address:</label>
<input type="text" class="textbox" name="email" id="email" maxlength="50" value="" dir="ltr" tabindex="1" 

我正在嘗試獲取具有“電子郵件地址”內部文本的進程標籤的輸入

我怎麼說這個?

這是我的應用程序,它通過ID抓取所有輸入元素。

<label for="email">Email Address:</label>
<input type="text" class="textbox" name="email" id="email" maxlength="50" value="" dir="ltr" tabindex="1" 

謝謝你們......我不得不說我已經學習VB.NET一段時間了,到目前為止這個論壇已經很棒了......很高興我找到了它...

一般承認的答案

這裡的基本概念是讓他們標籤for屬性關聯的ID匹配input

因此,我們首先遍歷標籤並將標籤的文本記錄在由for值鍵入的字典中,然後我們循環inputs ,如果inputs的id在字典中,我們從字典中檢索值(這是標籤文本)並顯示它。

請注意,我還修改了數據的收集方式以提高效率(幾乎在連接字符串的任何時候,都應該使用stringbuilder)。

這是重寫的代碼:

    Dim web As HtmlAgilityPack.HtmlWeb = New HtmlWeb()
    Dim doc As HtmlAgilityPack.HtmlDocument = web.Load("http://shaggybevo.com/board/register.php")
    Dim nodes As HtmlNodeCollection

    ' Keeps track of the labels by the associated control id
    Dim labelText As New System.Collections.Generic.Dictionary(Of String, String)

    ' First, get the labels
    nodes = doc.DocumentNode.SelectNodes("//label")

    If nodes IsNot Nothing Then
        For Each node In nodes
            If node.Attributes.Contains("for") Then
                Dim sFor As String

                ' Extract the for value
                sFor = node.Attributes("for").Value

                ' If it does not exist in our dictionary, add it
                If Not labelText.ContainsKey(sFor) Then
                    labelText.Add(sFor, node.InnerText)
                End If
            End If
        Next
    End If

    nodes = doc.DocumentNode.SelectNodes("//input")

    Dim sbText As New System.Text.StringBuilder(500)

    If nodes IsNot Nothing Then
        For Each node In nodes
            ' See if this input is associated with a label
            If labelText.ContainsKey(node.Id) Then
                ' If it is, add it to our collected information
                sbText.Append("Label = ").Append(labelText(node.Id))
                sbText.Append(", Id = ").Append(node.Id)

                sbText.AppendLine()
            End If
        Next
    End If

    Form2.RichTextBox1.Text = sbText.ToString
    Form2.Show()



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因