XPath — намного более мощный стандарт, позволяющий извлекать ту часть документа, которая интересует.

В XPath используется нотация, подобная путям файловой системы. Например, путь / идентифицирует корень XML-документа, a /DvdList — корневой элемент <DvdList>. Путь /DvdList/DVD выбирает все элементы <DVD> внутри <DvdList>.

И, наконец, точка (.) всегда выбирает текущий узел. Вдобавок, путь // — эторекурсивная операция пути, позволяющая искать во всех наследниках узла. Если начать путь с операции //, то выражение XPath будет искать узлы по всему документу.

Этих ингредиентов достаточно, чтобы строить многие базовые шаблоны, хотя стандарт XPath также определяет специальные критерии выбора, которые могут отфильтровать только интересующие узлы. В таблице представлен обзор символов XPath.

Выражение Значение
/ Ищет дочерние узлы. В случае помещения / в начало выражения XPath создает абсолютный путь от корневого узла. Например, /DvdList/DVD выбирает все элементы <DVD>, являющиеся дочерними по отношению к элементу <DvdList>.
// Ищет дочерние узлы рекурсивно, проходя по всем вложенным уровням. Если поместить // в начало выражения XPath, создается относительный путь, который выбирает узлы из любого места. Например, //DVD/Title выбирает все элементы <Title>, дочерние по отношению к элементу <DVD>.
@ Выбирает атрибут узла. Например, /DvdList/DVD/@ID выбирает атрибут по имени ID из элемента <DVD>.
* Выбирает элемент в пути. Например, /DvdList/DVD/* выбирает все узлы элемента <DVD> (в данном случае <Title>, <Director>, <Price> и <Starring>).
| Комбинирует несколько путей. Например, /DvdList/DVD/Title/DvdList/DVD/Director выбирает и элемент <Title> и элемент <Director> в элементе <DVD>.
. Указывает текущий узел (по умолчанию).
.. Указывает родительский узел. Например, если текущим узлом является <Title>, то .. ссылается на узел <DVD>.
[] Определяет критерий выбора, который может проверить содержащийся узел или значение атрибута. Например, /DvdList/DVD[Title=’ Forrest Gump’] выбирает элементы <DVD>, содержащие элемент <Title> с указанным значением. Или /DvdList/DVD[@ID=111] выбирает элементы <DVD> с указанным значением атрибута. Для комбинирования критериев служат ключевые слова and и or.
starts-with Эта функция извлекает элементы на основе текста, с которого должны начинаться содержащиеся в них элементы. Например, /DvdList/DVD[starts-with(Title, ‘Р’)] ищет все элементы <DVD>, которые имеют элемент Title, содержащий текст, начинающийся с буквы Р.
position Эта функция извлекает элементы на базе их позиций с использованием отсчета, начинающегося с 1. Например, /DvdList/DVD[position()=2] выбирает второй элемент <DVD>.
count Эта функция подсчитывает количество элементов с указанным именем. Например, count(DVD) вернет количество элементов <DVD>.

Пример для C#:

html.DocumentNode.SelectNodes("//div[@class='s4g_quest']|//h2");