2015-11-19 3 views
0

В HtmlAgilityPach, когда я выбрать один узел, как это:Как выбрать все теги «a» в текущем дочернем узле?

var node1 = htmlDoc.GetElementbyId("some_id"); 

Я хочу, чтобы получить весь ребенок «а» тег в своих детях. Однако, это не работает, потому что она возвращает нуль:

foreach (var childItem in node1.ChildNodes) { 
    var a = childItem.SelectNodes("a") // null 
    var a = childItem.SelectNodes("/a") // null 
    var a = childItem.SelectNodes("//a") // not null but select all the "a" tags on the whole(!) page, not only the ones within current childItem 
} 

Как вы можете видеть, последние методы выбирают все «а» метки на всех страницах, а не только те, в пределах текущего Childitem (!). Интересно, почему и как его выбрать, только в «childNode»?

+0

Try childItem.DocumentNode.SelectNodes ("// а [@href]"); –

ответ

1

Вам просто нужно добавить точку (.) в начале XPath, чтобы сделать его относительно текущего childItem:

var a = childItem.SelectNodes(".//a"); 
+0

, но не «childItem» делает это относительным? Почему нет? –

+0

Не обязательно. Когда XPath начинается с '/', контекст будет корневым элементом, игнорируя любой элемент, который вы выполняете XPath на – har07

Смежные вопросы