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