xpath和htmlagility包

时间:2011-04-05 01:29:45

标签: c# xpath screen-scraping html-parsing html-agility-pack

我明白了!我会留下这个以防万一像我这样的其他新手有同样的问题。

答案: **("./td[2]/span[@class='smallfont']")** *

我是xpath和html敏捷的新手。到目前为止我还很接近。

目标:退出凌晨4:30

将以下内容与htmlagility pack一起使用:

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

当我尝试做任何事情时,我把它归结为“\ r \ n \ t \ t \ r \ n \ t \ t \ t4:30am \ r \ n \ t \ t \ r \ n \ t”跨度我得到xpath异常。 我必须添加什么(“./td [2]”)才能在凌晨4:30结束?

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

1 个答案:

答案 0 :(得分:0)

我不知道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 && n.Attributes["class"].Value == "smallfont").FirstOrDefault();

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