html agility pack Référence d'objet non définie sur une instance d'objet

asp.net-web-api c# html-agility-pack

Question

Pour l'analyse du langage HTML, j'utilise Html Agility Pack et donc Grate, mais j'ai rencontré quelques problèmes: | c'est mon code de fond

public static HtmlDocument GetXHtmlFromUri2(string uri)
    {
        HttpClient client = HttpClientFactory.Create(new CustomeHeaderHandler());


        var htmlDoc = new HtmlDocument()
                                   {
                                       OptionCheckSyntax = true,
                                       OptionFixNestedTags = true,
                                       OptionAutoCloseOnEnd = true,
                                       OptionReadEncoding = true,
                                       OptionDefaultStreamEncoding = Encoding.UTF8,
                                   };

        htmlDoc.LoadHtml(client.GetStringAsync(uri).Result);

        return htmlDoc;

    }

J'utilise l'agilité HTML pour WebApi (Mvc4) et c'est Get Logic Method

//GET api/values
    public string GetHtmlFlights()
    {

        var result = ClientFlightTabale.GetXHtmlFromUri2("http://ikiafids.ir/departureFA.html");
        HtmlNode node = result.DocumentNode.SelectSingleNode("//table[1]/tbody/tr[1]");

        string temp = node.FirstChild.InnerHtml.Trim();

        return temp;

    }

mais quand j’appelle cette méthode (à partir de Browser and Fiddler), nous rencontrons des exceptions, avec ce thème:

La référence d'objet n'est pas définie sur une instance d'objet, et cette exception est concernée par cette ligne

string temp = node.FirstChild.InnerHtml.Trim();

Quelqu'un peut-il m'aider s'il-vous-plaît ?

Réponse acceptée

Je pense que vous cherchez quelque chose comme ça:

var result = ClientFlightTabale.GetXHtmlFromUri2("http://ikiafids.ir/departureFA.html");
var tableNode = result.DocumentNode.SelectSingleNode("//table[1]");

var titles = tableNode.Descendants("th")
                    .Select(th => th.InnerText)
                    .ToList();

var table = tableNode.Descendants("tr").Skip(1)
                    .Select(tr => tr.Descendants("td")
                                    .Select(td => td.InnerText)
                                    .ToList())
                    .ToList();

Réponse populaire

Je pense que votre sélecteur a tort. Essayez ceci à la place?

result.DocumentNode.SelectSingleNode("//table/tr[1]")


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow