입력 요소 앞에 레이블의 내부 텍스트를 가져 오는 방법은 무엇입니까?

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 속성이 연관된 input 의 ID와 일치하는 레이블을 얻는 것입니다.

따라서 레이블을 먼저 순환하고 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는 합법적입니까? 예, 이유를 알아보십시오.