Как перенастроить код для вывода определенных значений, а не сбора - PullRequest
0 голосов
/ 17 января 2012

В настоящее время я использую этот код в своем приложении, который отлично работает для циклического перемещения по странице, захвата метки входного значения формы и последующей печати значения в поле расширенного текста.

Я сейчас пытаюсь обновить код, чтобы дать мне значение ID, если метка содержит определенное имя.

Например, если метка перед полем ввода содержит слово «Имя пользователя», тогда я хочу, чтобы приложение выводило идентификатор поля ввода, а не только все, что имеет метку.

Вот мой текущий код:

    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




    RichTextBox1.Text = sbText.ToString

1 Ответ

1 голос
/ 17 января 2012

Я думаю, вы просто хотите изменить оператор if в последнем цикле на:

' See if this input is associated with a label             
If labelText.ContainsKey(node.Id) Then
    Dim sLabel As String

    sLabel = labelText(nodeId)

    ' If it is, see if the label name is one that we are looking for
    If sLabel.IndexOf("username", StringComparison.InvariantCultureIgnoreCase) >= 0 OrElse sLabel.IndexOf("user", StringComparison.InvariantCultureIgnoreCase) >= 0 OrElse sLabel.IndexOf("u", StringComparison.InvariantCultureIgnoreCase) >= 0 Then
        ' Report the node associated 
        Console.WriteLine("Username is associated with node id " & node.Id)
        ' And bail out of the loop
        Exit For
     End If
End If
...