모든 참가자 이름 값을 (span class = text) 및 (class = contenu)와 함께 shortname 값으로 가져오고 웹 페이지에 similiart로 표시되는 listview 항목의 다른 coloumn에 추가하려고합니다. . 사용자는 참가자의 전체 이름을 볼 수 있으며 개별 참여자 브랜드 (약식 이름)를 클릭하여 세부 정보를 얻을 수도 있습니다.
Imports HtmlAgilityPack
Public Class Form1
Dim web As New HtmlWeb
Dim doc As HtmlDocument = web.Load("http://www.eurovent-certification.com/en/Certified_products/Access_by_programme.php?rub=04&srub=01&ssrub=&lg=en&select_prog=AHU")
Dim ParticipantNodesShort As HtmlNodeCollection = doc.DocumentNode.SelectNodes("/html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//a[@class='contenu']")
Dim ParticipantNodesLong As HtmlNodeCollection = doc.DocumentNode.SelectNodes("/html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//span[@class='texte']")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' Adding ListView Columns
ListView2.Columns.Add("Participant's contact - Full Name", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim web As New HtmlWeb
Dim doc As HtmlDocument = web.Load("http://www.eurovent-certification.com/en/Certified_products/Access_by_programme.php?rub=04&srub=01&ssrub=&lg=en&select_prog=AHU")
Dim ParticipantNodes As HtmlNodeCollection = doc.DocumentNode.SelectNodes("/html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//span[@class='texte'] | /html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//a[@class='contenu']")
Dim participantname(20) As String
Dim brandname(50) As String
Dim participantcount As Integer = 0
Dim brandcount As Integer = 0
For Each item As HtmlNode In ParticipantNodes
If item.Name = "span" Then
Debug.Print(participantname(participantcount))
participantname(participantcount) = item.InnerText.Replace(vbLf, "").Replace(vbCr, "").Replace(vbTab, "")
participantcount = participantcount + 1
Else
If Not item.Attributes.Count = 3 Then
brandname(brandcount) &= String.Format(" [{0}]", item.InnerText.Replace(vbLf, "").Replace(vbCr, "").Replace(vbTab, ""))
brandcount = brandcount + 1
End If
End If
ListView2.Items.Add(participantname(participantcount) & " " & brandname(brandcount))
Next
End Sub
End Class
문제를 단순화하십시오.
이것은 전체 페이지에서 참여자 이름과 브랜드를 보여주는 부분입니다 (일부에는 하나가 있고 다른 일부에는 2, 3 또는 4가 있음)
아래처럼; Mekar srl (참가자 이름)에는 쉼표로 구분 된 4 가지 브랜드가 있습니다 (Eden, Mekar VENCO, Venticlima)
MEKAR srl (EDEN, MEKAR, VENCO, VENTILCLIMA)
그러나 그들 중 일부는 단지 하나입니다;
아래 예와 같이; Menegra Gmbh (참가자 이름)는 Menegra MENERGA GmbH (Menerga)
그래서 나는이 데이터를 페이지와 함께 거의 동일한 논리를리스트 뷰에 쓰려고 노력할 것이다.
첫 번째 열에는 참여자 이름이 나열되고 두 번째 열에 동일한 행이 표시됩니다. 브랜드 이름이 나열됩니다 (또는 같은 행의 첫 번째 열, 세 번째 및 네 번째 열)
관계없이 listview 내가 웹 페이지에서 배열 형식 문자열에 기록하고 나중에 listview에서 그들을 표시하는 데이터를 잡아 아이디어가 필요합니다.
위의 코드를 통해 나는 모든 노드를 연속적으로 읽으며 이들 간의 관계를 잃어 버렸습니다 (여러 브랜드의 참가자 이름과 같은)
이 진술이 더욱 분명 해져서 더 많은지지를 얻길 바랍니다.
문안 인사
알리
좋아, 그래서 내가 ListView에 몇 가지 빠른 검색을 했어 ... 여기 결과입니다.
Imports HtmlAgilityPack
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
ListView2.Columns.Add("Participant's contact - Full Name", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim web As New HtmlWeb
Dim doc As HtmlDocument = web.Load("http://www.eurovent-certification.com/en/Certified_products/Access_by_programme.php?rub=04&srub=01&ssrub=&lg=en&select_prog=AHU")
Dim ParticipantNodes As HtmlNodeCollection = doc.DocumentNode.SelectNodes("/html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//span[@class='texte'] | /html/body/table/tr/td[2]/table[4]/tr[2]/td[2]//a[@class='contenu']")
Dim ColumnCount As Integer = 1
Dim TempListItem As New ListViewItem
For Each item As HtmlNode In ParticipantNodes
If item.Name = "span" Then
ColumnCount = 1
Dim Name As String = item.InnerText.Replace(vbLf, "").Replace(vbCr, "").Replace(vbTab, "")
TempListItem = ListView1.Items.Add(Name)
Else
If Not item.Attributes.Count = 3 Then
ColumnCount += 1
If ColumnCount > ListView1.Columns.Count Then
ListView1.Columns.Add("Brand Name", 100, HorizontalAlignment.Left)
End If
Dim SubName As String = item.InnerText.Replace(vbLf, "").Replace(vbCr, "").Replace(vbTab, "")
TempListItem.SubItems.Add(SubName)
End If
End If
Next
Dim breaker = 0
End Sub
End Class
이것은 출력의 일부입니다.
[Menu] [AHU]
List of participants to the certification programme for Air Handling Units (AHU) :
A.T.C Air Trade Centre Havaland?rma Sistemleri San. ve Tic. Ltd. ?ti. [ATC]
ACS KLIMA Imalat Sanayi ve Ticaret Ltd. Sti [ACS]
AERA Iklimlendirme Teknolojileri San. ve Tic AS [AERA]
AIRCALO [AIRCALO]
AIRLAN INDUSTRIAL S.A. [AIRLAN]
Airtechnic Hatzoudis E.P.E. [AIRTECHNIC]
AL SALEM YORK Manufacturing Co,Ltd [YORK]
AL-KO THERM GmbH [ALKO]
ALARKO CARRIER San. Tic. A.S. [ALARKO] [CARRIER]
나는별로 익숙하지 않은 listview를 많이 사용하지 않았고 가변 길이의 컬럼을 가지고 있기 때문에 이러한 결과를 어딘가에 임시 저장 한 다음 몇개의 컬럼을 확인해야 할 것인가를 확인한다. 그런 다음 결과를 listview에 덤프하십시오.