Предположим, у меня есть полный html-документ в качестве XML-ввода.
Как бы выглядел XSLT-файл, если я хочу только вывести первое (или любое) изображение из html?XSLT Получить первое вхождение определенного тега
ответ
выражение Один XPath, который выбирает первый <img>
элемент в документе:
(//img)[1]
Обратите внимание, чточастую ошибку - как это сделано у @Oded
в своем ответе является предложите следующее выражение XPath - в общем случае он может выбрать более одного элемента:
//img[1]
(: WRONG !!! :)
Это выбирает все элементы <img>
в документе, каждый из которых является первым дочерним элементом его родителя <img>
.
Вот точное объяснение этой частой ошибки - в W3C XPath 1.0 Recommendation:
ПРИМЕЧАНИЕ: Расположение пути //para[1]
не означает, что то же самое, как путь /descendant::para[1]
местонахождения. Последний выбирает первый элемент потомка para
; первый выбирает всех потомков para
элементов, которые являются первыми пара детьми своих родителей.
Дальнейшая проблема существует, если документ определил пространство имен по умолчанию, которое должно иметь место с XHTML. XPath рассматривает любое неподписанное имя как принадлежащее без пространства имен, а выражение (//img)[1]
не выбирает узел, потому что в документе нет элемента, который принадлежит , и не имеет пространства имен и имеет имя img
.
В этом случае есть два способа указать желаемое выражение XPath:
(//x:img)[1]
- где префиксx
связан (языком хостинг) с определенной namespcae по умолчанию (в данном случае это это XHTML пространство имен).(//*[name()='img'])[1]
Выражение XPath будет отображать первое изображение со страницы HTML: (//img)[1]
.
См. Ответ от @Dimitre Novatchev
для получения дополнительной информации о проблемах с ним.
См. Мой ответ для объяснения проблемы с вашим ответом. Прочитайте спецификацию XPath - определение аббревиатуры '//' и выполните поиск этой частой ошибки.Если проблема еще неясна, задайте отдельный вопрос, и многие люди будут рады объяснить. :) –
** Этот ответ W R O N G ** !!!!! См. Мой ответ для объяснения. –
Я определенно не хочу читать спецификацию XPath. Но я вижу, что говорит Димитрий. '// img [1]' будет выбирать первый тег img * any * parent, а не первый из документа. –
Что вы получили до сих пор? Что не работает? – Oded
Хороший вопрос (+1). См. Мой ответ для единственного правильного решения. :) –