Html Agility Pack Xpath не работает

c# html-agility-pack nullreferenceexception parsing xpath

Вопрос

поэтому, когда я пытаюсь сделать, это проанализировать HTML-документ, используя Html Agility Pack. Я загружаю html-документ, и он работает. Проблема заключается в том, что я пытаюсь разобрать его с помощью XPath. Я получаю ссылку «System.NullReferenceException:» Object, не установленную на экземпляр объекта. »« Ошибка.

Чтобы получить мой xpath, я использую окно разработки Chrome и выделяю всю таблицу, в которой есть строки, содержащие данные, которые я хочу проанализировать, щелкните правой кнопкой мыши и скопируйте Xpath.

Вот мой код

string url = "https://www.ctbiglist.com/index.asp";
        string myPara = "LastName=Smith&FirstName=James&PropertyID=&Submit=Search+Properties";
        string htmlResult;

        // Get the raw HTML from the website
        using (WebClient client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

            // Send in the link along with the FirstName, LastName, and Submit POST request
            htmlResult = client.UploadString(url, myPara);

            //Console.WriteLine(htmlResult);
        }

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlResult);


        HtmlNodeCollection table = doc.DocumentNode.SelectNodes("//*[@id=\"Table2\"]/tbody/tr[2]/td/table/tbody/tr/td/div[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/form/div/table[1]/tbody/tr");

        Console.WriteLine(table.Count);

Когда я запускаю этот код, он работает, но захватывает все таблицы в документе HTML.

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
        from row in table.SelectNodes("//tr").Cast<HtmlNode>()
        from cell in row.SelectNodes("//th|td").Cast<HtmlNode>()
        select new { Table = table.Id, CellText = cell.InnerText };

foreach (var cell in query)
{
     Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}

То, что я хочу, - это конкретная таблица, в которой содержатся все строки таблиц, в которых есть данные, которые я хочу проанализировать на объекты.

Спасибо за помощь!!!

Популярные ответы

Изменить строку

from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()

в

from table in doc.DocumentNode.SelectNodes("//table[@id=\"Table2\"]").Cast<HtmlNode()

Это позволит выбрать только определенную таблицу с заданным идентификатором. Но если у вас есть вложенные таблицы, то вы измените свой xpath соответственно, чтобы получить вложенные строки таблицы.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему