【问题标题】:C# HTML Agility Pack (not/wrong) iterating over node collectionC# HTML Agility Pack(非/错误)迭代节点集合
【发布时间】:2012-08-08 20:46:15
【问题描述】:

我使用 HTML Agility Pack 从网页中获取 URL。网址是:

http://goo.gl/DqfQl

如果我使用下面的代码,我会得到我想要的链接:

String html = getHtml("http://goo.gl/DqfQl");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(html);

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='name']/a"); 

foreach (HtmlNode row in address_rows)
{
    MessageBox.Show(row.GetAttributeValue("href",LINK_NOT_FOUND));
}

但是当我更改 HtmlNodeCollection 以使用 class="row' 获取包含 div 并且想要获取 URL 时,我总是得到第一个 URL。

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='row']"); 

foreach (HtmlNode element in address_rows) {
    MessageBox.Show(element.SelectSingleNode("//div[@class='name']/a").GetAttributeValue("href",LINK_NOT_FOUND));
}   

我用这段代码玩了一会儿,有一段时间我认为我工作了。但现在我不能使用第二个代码 sn-p 选择我想要的所有 URL。你能帮忙吗?

【问题讨论】:

    标签: c# collections foreach html-agility-pack


    【解决方案1】:

    您必须添加一个点“。”到 XPath,否则它将从 Document 的开头匹配,而不是在节点内部。

    只需将您的第二个字符串更改为".//div[@class='name']/a",它应该可以工作

    【讨论】:

    • 非常感谢。有用。 HAP 有很好的文档吗?我在 Google 上搜索了 5 分钟,但找不到任何有用的东西。
    • 寻找一个好的 xpath 教程更容易,所有适用于 xpath 的东西也适用于 agilitypack。一个很好的起点是w3schools.com/xpath
    • 哦,还有 HAP 测试平台,可以让你加载 html 并测试你的 xpath haptestbed.codeplex.com
    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多