Одно выражение XPath, которое выбирает первый элемент <img>
в документе:
(//img)[1]
Обратите внимание , что частая ошибка - как сделал @Oded
в своем ответе - предложить следующее выражение XPath - в общем случае он может выбирать более одного элемента :
//img[1]
(: НЕПРАВИЛЬНО !!!:)
Выбирает все элементы <img>
в документе, каждый из которых является первым <img>
дочерним элементом своего родителя.
Вот точное объяснение этой частой ошибки - в рекомендации W3C XPath 1.0 :
ПРИМЕЧАНИЕ : Путь местоположения //para[1]
не означает то же самое, что путь местоположения /descendant::para[1]
. Последний выбирает первый потомок para
элемент; первый выбирает все потомки para
элементов, которые являются первыми парами детей их родителей.
Еще одна проблема существует, если документ определил пространство имен по умолчанию, что должно быть в случае с XHTML. XPath обрабатывает любое нефиксированное имя как принадлежащее без пространства имен , а выражение (//img)[1]
не выбирает ни одного узла, поскольку в документе нет элемента, который принадлежит без пространства имен и имеет имя img
.
В этом случае есть два способа указать требуемое выражение XPath:
(//x:img)[1]
- где префикс x
связан (по языку хостинга) с определенным пространством имен по умолчанию (в данном случае это пространство имен XHTML ).
(//*[name()='img'])[1]