HtmlAgilityPack вмешивается в мой код (не вопрос HtmlAgilityPack) - PullRequest
0 голосов
/ 13 сентября 2010

Вот фрагмент моего кода:

 Dim content As String = ""
    Dim web As New HtmlAgilityPack.HtmlWeb
    Dim doc As New HtmlAgilityPack.HtmlDocument()
    doc.Load(WebBrowser1.DocumentStream)
    Dim hnc As HtmlAgilityPack.HtmlNodeCollection = doc.DocumentNode.SelectNodes("//div[@class='address']/preceding-sibling::h3[@class='listingTitleLine']")
    For Each link As HtmlAgilityPack.HtmlNode In hnc
      Dim replaceUnwanted As String = ""
      replaceUnwanted = link.InnerText.Replace("&", "&") '
<span style="white-space:pre"> </span>  content &= replaceUnwanted & vbNewLine
    Next
'I have a bunch of code here I removed ------------------------------
      Dim htmlDoc As HtmlDocument = Me.WebBrowser2.Document
      Dim visibleHtmlElements As HtmlElementCollection = htmlDoc.GetElementsByTagName("TD")
      Dim found As Boolean = False
      For Each str As HtmlElement In visibleHtmlElements
        If Not String.IsNullOrEmpty(str.InnerText) Then
          Dim text As String = str.InnerText
          If str.InnerText.Contains(parts(2)) Then
            found = True
          End If
        End If
      Next

Я получаю сообщение об ошибке для Me.WebBrowser2.Document :

"Значение типа 'System.Windows.Forms.HtmlDocument' нельзя преобразовать в 'HtmlAgilityPack.HtmlDocument'.

И еще один для htmlDoc.GetElementsByTagName :

GetElementsByTagName не является членом HtmlAgilityPack.HtmlDocument.

Код работал, когда я не использовал HAP, но мне нужно было импортировать его, чтобы что-то сделать, и теперь это мешает. Помогите пожалуйста.

1 Ответ

3 голосов
/ 13 сентября 2010

Проблема в том, что оба типа HtmlAgilityPack и System.Windows.Forms имеют тип с именем HtmlDocument.

Возможно, вы могли бы просто исправить эту одну строку:

' Here the VB compiler must think you mean HtmlAgilityPack.HtmlDocument: '
Dim htmlDoc As HtmlDocument

...изменив его на следующее:

Dim htmlDoc As System.Windows.Forms.HtmlDocument

В general хорошим способом решения этой проблемы является использование оператора Imports для предоставления псевдонимов для типов с конфликтующими именами,вот так:

Imports AgilityDocument = HtmlAgilityPack.HtmlDocument
Imports FormsDocument = System.Windows.Forms.HtmlDocument

Тогда вы бы использовали один из этих псевдонимов в своем коде вместо того, чтобы вводить общее имя.Так, например:

Dim doc As New AgilityDocument
Dim htmlDoc As FormsDocument = Me.WebBrowser2.Document
...