XSLT Получить первое вхождение определенного тега - PullRequest
9 голосов
/ 23 апреля 2010

Допустим, у меня есть полный HTML-документ в качестве XML-ввода.Как будет выглядеть XSLT-файл, если я хочу вывести только первое (или любое) изображение из html?

Ответы [ 2 ]

17 голосов
/ 23 апреля 2010

Одно выражение 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:

  1. (//x:img)[1] - где префикс x связан (по языку хостинга) с определенным пространством имен по умолчанию (в данном случае это пространство имен XHTML ).

  2. (//*[name()='img'])[1]

2 голосов
/ 23 апреля 2010

Выражение XPath извлекает первое изображение со страницы HTML: (//img)[1].

См. Ответ от @Dimitre Novatchev для получения дополнительной информации о проблемах с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...