Ошибка Xpath при использовании .innertext в vb

Я написал этот фрагмент кода, чтобы получить html-код из URL-адреса, вставленного пользователем. Я использовал HtmlAgilityPack, потому что хочу работать только с определенными частями кода (тело, заголовок и т. д.). Мне удалось «загрузить» данные с веб-сайта, но я думаю, что мой код Xpath как-то неверен. Вот соответствующий код:

Dim htmlWeb As String = URL (inserted by the user)
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    htmlDoc.LoadHtml(htmlWeb)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNodeCollection = htmlDoc.DocumentNode.SelectNodes("...")
    htmlText = myBR("...").InnerText

    For Each Match_Positive_Word As Match In Regex.Matches(htmlText, Positive_Words)
        Positive_Counter = Positive_Counter + 1
    Next

    For Each Match_Negative_Word As Match In Regex.Matches(htmlText, Negative_Words)
        Negative_Counter = Negative_Counter + 1
    Next

Вопросы:

  • Что мне нужно написать в скобках, чтобы получить, например, данные внутри тега body?
  • Правильно ли мое соединение с html-кодом? Есть ли лучший или более эффективный способ сделать это?

ИЗМЕНИТЬ

Когда я делаю htmlDoc.Load(htmlWeb), это дает мне ошибку: форматы URI не поддерживаются. Но когда я делаю LoadHtml, кажется, что это работает. Основная проблема заключается в том, что в строке htmlText = myBR.InnerText. возвращается ошибка: Ссылка на объект не указывает на экземпляр объекта. Вот что я написал:

Dim htmlWeb As String = URL
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    htmlDoc.LoadHtml(htmlWeb)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNode = htmlDoc.DocumentNode.SelectSingleNode("//body")
    htmlText = myBR().InnerText

Есть ли что-нибудь, что мне нужно добавить в баракеты myBR? Я пробовал .InnerHtml, и он тоже не работает.


person ILoveMom    schedule 19.04.2014    source источник
comment
попробовал простой URL-адрес вики - en.wikipedia.org/wiki/HTML   -  person ILoveMom    schedule 19.04.2014
comment
хорошо, обновил мой ответ. Оказалось, что метод Load() HtmlDocument не поддерживает загрузку xml из веб-URL.   -  person har07    schedule 20.04.2014


Ответы (1)


Используйте метод Load(), если у вас есть URL-адрес, и используйте метод LoadHtml(), если у вас есть HTML-страница. Похоже, вам нужен первый метод в этом случае:

htmlDoc.Load(htmlWeb)

Как вы просили в качестве примера, чтобы получить тег body, вы можете использовать этот простой XPath //body

ОБНОВЛЕНИЕ:

Я пропустил тот факт, что HAP HtmlDocument, в отличие от XDocument, не может Load напрямую из URL. Метод принимает только путь к файлу на локальном компьютере. Чтобы загрузить HtmlDocument из URL-адреса, вам нужно вместо этого использовать метод Load() HtmlWeb. Попробуйте так:

Dim htmlWeb As New HtmlWeb
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = htmlWeb.Load(URL)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNode = htmlDoc.DocumentNode.SelectSingleNode("//body")
    htmlText = myBR().InnerText
person har07    schedule 19.04.2014