在vb中使用.innertext时出现Xpath错误

时间:2014-04-19 09:15:33

标签: vb.net xpath html-agility-pack

我编写了这段代码,以便从用户插入的URL中获取html代码。 我使用了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的barackets中添加什么吗? 我试过.InnerHtml,它也不起作用。

1 个答案:

答案 0 :(得分:0)

如果您有URL,请使用Load()方法,如果您有html页面,请使用LoadHtml()。在这种情况下,您似乎需要第一种方法:

htmlDoc.Load(htmlWeb)

正如您所说的那样,要获取body标签,您可以使用这个简单的XPath //body

更新:

我错过了HAP HtmlDocumentXDocument不同的事实,不能直接从Load开始。该方法仅接受本地计算机中文件的路径。要从网址加载HtmlDocument,您需要使用HtmlWeb的{​​{1}}方法。试试这个:

Load()