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");