0

我花了太多时间试图解决这个小问题。我已将问题缩小到引发错误的确切过程。是的,我用过谷歌。在一些聪明人回复“搜索谷歌”之前把它扔掉!

无论如何,这里:


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 点写了大部分代码,哈哈。

4

1 回答 1

0

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

Dim doc As HtmlDocument = Nothing

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

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

Dim doc As New HtmlDocument
于 2012-05-22T15:50:52.410 回答