2010-03-20 1 views
3

Я пытаюсь извлечь все ссылки с атрибутом href, который начинается с http: //, https: // или /. Эти ссылки лежат внутри таблицы (tbody> tr> td и т. Д.) С определенным классом. Я думал, что могу указать только элемент a без всего пути к нему, но он, похоже, не работает. Я получаю NullReferenceException на линии, которая выбирает ссылку:Выделить все ссылки из таблицы Html с помощью XPath (и HtmlAgilityPack)

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. Я создаю накладные расходы, когда я дважды запрашиваю документ?

ответ

3
+0

@Tomalak, Спасибо за исправление опечатки. –

2

Проблемы в том, что вы выбираете таблицу, а затем сразу же пытаетесь выбрать якоря, как если бы они были прямыми дедуктами. Есть tr и td теги посередине.

Итак, если вы измените свое XPath к следующему, все должно работать:

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

Это не будет работать, если ваши якоря завернутые в чем-то еще, чтобы вы могли выбрать все якорей в текущем наборе узлов (т.е. таблица):

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

См this подробнее о синтаксисе XPath.