VB 2010 + HTMLAgilityPack +大型处理=错误?

时间:2012-05-22 15:35:35

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

我花了太多时间试图解决这个小问题。我已将问题缩小到引发错误的确切过程。是的,我已经使用过谷歌了。在一些有智慧的家伙回复“搜索谷歌”之前,就把它扔出去了!

无论如何,这里:


Try
    Dim tempSource as String = Nothing
    Console.WriteLine("Loading document...")

    Dim FILE_NAME As String = "C:\pathto\file.txt"
    If System.IO.File.Exists(FILE_NAME) = True Then
        Dim objReader As New System.IO.StreamReader(FILE_NAME)
        tempSource = objReader.ReadToEnd
        objReader.Close()
        Console.WriteLine("Loaded the document!")
    Else
        Console.WriteLine("Error loading document!")
        MsgBox("Error loading document!")
        Exit Sub
    End If

    Dim doc As HtmlDocument = Nothing
    If tempSource IsNot Nothing Then
        Console.WriteLine("Temp Source was not nothing, so loading HAP doc")
        doc.Load(tempSource)  '<--- This is where the error is!!!!!
        Console.WriteLine("HAP doc loaded!")
    Else
        Console.WriteLine("Error: Unable to load source file into parser!")
        MsgBox("Error: Unable to load source file into parser!")
        Exit Sub
    End If
    Console.WriteLine("Document loaded!")
    Console.WriteLine("Processing...")

    For Each node As HtmlNode In doc.DocumentNode.Elements("//site")
        'my code to process each element here
        'not important because my app doesnt get this far lol
    Next

Catch ex as Exception
    Console.Writeline("Caught Exception: {0}", ex.Message)
End Try

我正在加载一个包含大约1100行的文本文件,每行将使用HTML Agility Pack进行处理。据我所知,当它运行“doc.loadhtml(richtextbox1)”时,它会抛出错误。我也尝试将文件加载到字符串中,并使用“doc.loadhtml(thestring)”加载字符串。它没有任何区别,仍然是错误。

以下是每行的外观示例:


<Site Index="" Name="" Group="" PR="" />
<Site Index="" Name="" Group="" PR="" />
<Site Index="" Name="" Group="" PR="" />
<Site Index="" Name="" Group="" PR="" />
<Site Index="" Name="" Group="" PR="" />
<Site Index="" Name="" Group="" PR="" />

我正在使用HTML Agility Pack,但上面的内容是每行,大约1100行!为了测试,在加载1100行文件之前,我有一个由大约50行组成的较小的文本文件;)没有任何HTML,HEAD或BODY标记!我的解析不需要它们。我正在使用HTML Agility Pack,因为它很容易解析元素。我可以轻松地从每一行中获取每个值。

我不确定错误是否因为它在技术上不是HTML?这意味着因为加载的代码没有HTML或BODY标记,它会出错吗?我想发布这个问题,当我在等待一些答案时,我将以另一种方式解析文档。只是好奇这笔交易是什么以及HTML Agility Pack无法正常工作的原因。对于我自己的学习和知识,更多的是概念证明。

这是我得到的错误(顺便说一下doc.load()行,它是抛出异常的地方):


Object reference not set to an instance of an object

最后注意:例程在后台线程上。我之前使用过多线程,并且为代码中的更深层次创建了委托。也许我只是忽略了一些东西,昨晚我写的大部分代码都是在凌晨3点左右。

1 个答案:

答案 0 :(得分:0)

看起来你没有初始化文件......

Dim doc As HtmlDocument = Nothing

我不编写VB,主要是C#,Java和C ++,但doc = Nothing似乎是doc = null,当你在null对象上调用load(...)方法时,我希望请参阅“对象引用未设置为对象的实例”异常。

尝试将文档初始化为实际的HtmlDocument

Dim doc As New HtmlDocument