我花了太多时间试图解决这个小问题。我已将问题缩小到引发错误的确切过程。是的,我用过谷歌。在一些聪明人回复“搜索谷歌”之前把它扔掉!
无论如何,这里:
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 点写了大部分代码,哈哈。