0

私はこの小さな問題を整理するのに多くの時間を費やしました。エラーをスローする正確な手順に問題を絞り込みました。はい、Google を使用したことがあります。賢者が「Google を検索」と答える前に、それを投げ出してしまいましょう。

とにかく、ここに:


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、 nullオブジェクトでメソッドdoc = nullを呼び出すとload(...)、「オブジェクト参照がオブジェクトのインスタンスに設定されていない」という例外が発生することが予想されます。

ドキュメントを実際に初期化してみてくださいHtmlDocument

Dim doc As New HtmlDocument
于 2012-05-22T15:50:52.410 に答える