2010-03-20 70 views
3

我试图实现的是提取所有链接,其中包含以http://,https://或/开头的href属性。这些链接位于具有特定类别的表格(tbody> tr> td等)中。我以为我可以指定一个没有整个路径的元素,但它似乎不工作。使用XPath(和HtmlAgilityPack)从Html表中选择所有链接

var table = doc.DocumentNode.SelectSingleNode("//table[@class='containerTable']"); 
if (table != null) 
{ 
    foreach (HtmlNode item in table.SelectNodes("a[starts-with(@href, 'https://')]")) 
    { 
     //not working 

我不知道任何建议或最佳实践,当涉及到的XPath:我在这个选择的链接线得到一个NullReferenceException。当我查询文档两次时,是否会创建开销?

回答

2

问题是,您选择的表,然后立即试图选择锚点,就好像他们是直接的死者。中间有trtd标签。

所以,如果你改变你的XPath来下面,事情应该工作:

"tbody/tr/td/a[starts-with(@href, 'https://')]" 

如果你的锚别的东西包裹起来这是行不通的,所以你可以选择锚所有在当前的节点集(即表):

"//a[starts-with(@href, 'https://')]" 

为XPath语法更详细地参见this

相关问题