xpath 和 htmlagility 包

Posted

技术标签:

【中文标题】xpath 和 htmlagility 包【英文标题】:xpath and htmlagility pack 【发布时间】:2011-07-29 14:32:36 【问题描述】:

我想通了!我会留下这个帖子,以防其他像我这样的新手有同样的问题。

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

我是 xpath 和 html 敏捷性的新手。我如此接近却又如此遥远。

目标:退出上午 4:30

通过将以下内容与 htmlagility 包一起使用:

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

当我尝试用我得到 xpath 异常的跨度。 我必须在 ("./td[2]") 中添加什么才能以凌晨 4:30 结束?

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

【问题讨论】:

您可以回答自己的问题。在同一个问题中这样做会使它成为一个不真实的问题。 【参考方案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 && n.Attributes["class"].Value == "smallfont").FirstOrDefault();

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

【讨论】:

这真的很酷。您是否使用流式阅读器从 url 中提取 html?作为编程新手,我喜欢学习新事物。

以上是关于xpath 和 htmlagility 包的主要内容,如果未能解决你的问题,请参考以下文章

XPath详解

使用 html agility xpath 查找 webdriver 元素

使用 HtmlAgility 包转换 HTML

DOM 与 XPath - 区别? [关闭]

Html Agility Pack:查找评论节点

从 org.w3c.dom.Node 获取 Xpath