XSLT Получают первое вхождение определенного тега

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

9
задан Cœur 30 April 2017 в 14:44
поделиться

2 ответа

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

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

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

17
ответ дан 4 December 2019 в 11:04
поделиться

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

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

2
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: