2010-03-20 91 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