7

我希望能够从 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>

任何帮助表示赞赏,在此先感谢。

4

3 回答 3

17
var div = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']");
if(div!=null)
{
     var links = div.Descendants("a")
                    .Select(a => a.InnerText)
                    .ToList();
}
于 2012-12-15T22:00:35.920 回答
4

使用这个 XPath:

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

它抓取witha中的所有后代元素。divclass = 'myclass'

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

于 2012-12-15T22:20:40.110 回答
2

使用

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

这将选择任何其属性包含类名的任何a元素的后代元素。divclass"myclass"

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

于 2012-12-16T00:08:22.727 回答