C # HTMLAgilityPack System.NullReferenceException - PullRequest
0 голосов
/ 31 октября 2018

Я могу получить следующее для работы в .Net Fiddle: https://dotnetfiddle.net/Xd8pO1

using HtmlAgilityPack;
using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var html =
        "<select class=\"vui-input d2l-select\" name=\"roleid\" id=\"z_d\" title=\"Role\"><option value=\"0\" selected=\"selected\">-- Select a Role --<option value=\"104\">Instructor<option value=\"105\">Student<option value=\"106\">TA 1<option value=\"107\">TA 2<option value=\"108\">TA 3<option value=\"109\">TA 4<option value=\"114\">TA 5<option value=\"115\">TA 6<option value=\"111\">Course Developer</select>";

        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(html);

        string name = htmlDoc.DocumentNode
                        .SelectNodes("//*[text()[contains(., 'Instructor')]]").First().Attributes["value"].Value;

        Console.WriteLine(name);
    }
}

Однако он не работает, когда я пытаюсь запустить его в своем приложении .Net или в новом консольном приложении.

Я получаю следующую ошибку:

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=DELETE
  StackTrace:
   at Program.Main() in E:\...........:line 18

Я проверил, чтобы убедиться, что источник правильно отформатирован. Замена строки 18 следующими работами:

string name = `htmlDoc.DocumentNode.SelectNodes("//select/option[@value=104]")
.First()
.Attributes["value"].Value;`

Есть идеи, почему это работает в .Net Fiddle, но не в моем приложении c # в Visual Studio?

1 Ответ

0 голосов
/ 31 октября 2018

Я провел еще несколько поисков и нашел это: HtmlAgilityPack создает отсутствующие закрывающие теги в OuterHtml

Похоже, у HTMLAgilityPack возникла проблема с анализом тегов, когда он удалил закрывающий тег. Я обновил свою версию HTMLAgilityPack до последней версии и теперь она работает.

...