HtmlAgilityPack获取DIV内的所有链接

时间:2012-12-15 21:48:43

标签: c# .net xml xpath html-agility-pack

我希望能够从div中获得2个链接。

目前我可以选择一个,但是有更多它似乎不起作用。

HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(url);

HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']");

            if (node != null)
            {
                foreach (HtmlNode type in node.SelectNodes("//a@href"))
                {
                    recipe.type += type.InnerText;
                }
            }
            else
                recipe.type = "Error fetching type.";

试图从这段HTML中获取它:

<div class="myclass">
<h3>Not Relevant Header</h3>
    <a href="#">This text</a>, 
    <a href="#">and this text</a>
</div>

感谢任何帮助,提前致谢。

3 个答案:

答案 0 :(得分:15)

var div = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']");
if(div!=null)
{
     var links = div.Descendants("a")
                    .Select(a => a.InnerText)
                    .ToList();
}

答案 1 :(得分:4)

使用此XPath:

//div[@class = 'myclass']//a

它使用a抓取div中所有后代class = 'myclass'元素。

//a@href是不正确的XPath。

答案 2 :(得分:2)

使用

//div[contains(concat(' ', @class, ' '), ' myclass ')]//a

这将选择任何a元素,该元素是div属性包含类别class的任何"myclass"的后代。

类名可以是单个,或者属性也可以包含其他类名。在这种情况下,classname可以是起始的,也可以是最后一个,或者可以被其他类名包围 - 上面的XPath表达式在所有这些不同的情况下正确地选择了所需的节点。