xpath и htmlagility pack

#c# #xpath #screen-scraping #html-parsing #html-agility-pack

#c# #xpath #очистка экрана #html-синтаксический анализ #html-agility-pack

Вопрос:

Я понял это! Я оставлю это опубликованным на случай, если у какого-нибудь другого новичка, такого как я, возникнет такой же вопрос.

Ответ: **("./td[2]/span[@class='smallfont']")** *

Я новичок в xpath и html agility. Я так близко, но все же так далеко.

ЦЕЛЬ: завершить работу в 4:30 утра

используя следующее с пакетом htmlagility:

 foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table[@id='weekdays']/tr[2]")){
string time = table.SelectSingleNode("./td[2]").InnerText;
  

Я довожу это до » r n t r n t t4:30am r n t t r n t» когда я пытаюсь что-либо сделать с span, я получаю исключения xpath. Что я должен добавить к («./td[2]»), чтобы в итоге получилось 4:30 утра?

 HTML
<td class="alt1 espace" nowrap="nowrap" style="text-align: center;">
<span class="smallfont">4:30am</span>
</td>
  

Комментарии:

1. Вы можете ответить на свой собственный вопрос. Выполнение этого в том же вопросе делает его ненастоящим вопросом.

Ответ №1:

Я не знаю, является ли Linq вариантом, но вы могли бы также сделать что-то подобное:

         var time = string.Empty;
        var html =
            "<td class="alt1 espace" nowrap="nowrap" style="text-align: center;"><span class="smallfont">4:30am</span></td>";

        var document = new HtmlDocument() { OptionWriteEmptyNodes = true, OptionOutputAsXml = true };

        document.LoadHtml(html);

        var timeSpan =
            document.DocumentNode.Descendants("span").Where(
                n => n.Attributes["class"] != null amp;amp; n.Attributes["class"].Value == "smallfont").FirstOrDefault();

        if (timeSpan != null)
            time = timeSpan.InnerHtml;
  

Комментарии:

1. это действительно круто. Используете ли вы streamreader для извлечения HTML-кода из URL-адреса? Будучи новичком в программировании, я люблю изучать новые вещи.