Комментарии 16
Спасибо, запомнил и на всякий случай добавил в избранное.
Отличная статья, как раз то сто сейчас нужно! Спасибо автору!
Оси используемые. Трудно даже представить как без них. Может за исключением self, наверное*)
Куда интересней было прочитать, про «descendant::foo».
Куда интересней было прочитать, про «descendant::foo».
«редкоиспользуемые» — это вы конешно перегнули, но статья вполне себе ничего
Соглашусь не со всем, self вообще не имеет смысла, особенно в этом контексте. Как выше было сказано, гораздо лучше писать following-sibling::foo[1]. Видимо эта ось навигации самая редкая.
А чтобы разрешить проблему .//foo[1], пишите (.//foo)[1]. И вообще, если в вашем XPath выражении используется хоть один "/" и необходимо получить лишь первый элемент, используйте всегда скобки (xpath/xpath)[1], иначе рискуете получить не то что хотели.
А если XPath выражение используется в <xsl:value-of select=""/>, то вообще нет необходимости использовать ограничитель [1] (синоним [position()=1]).
А чтобы разрешить проблему .//foo[1], пишите (.//foo)[1]. И вообще, если в вашем XPath выражении используется хоть один "/" и необходимо получить лишь первый элемент, используйте всегда скобки (xpath/xpath)[1], иначе рискуете получить не то что хотели.
А если XPath выражение используется в <xsl:value-of select=""/>, то вообще нет необходимости использовать ограничитель [1] (синоним [position()=1]).
following-sibling::foo[1]
не решают исходную задачу, прочтите внимательно условие. Спасибо за замечание про скобки.> А если XPath выражение используется в <xsl:value-of select=""/>, то вообще нет необходимости использовать ограничитель [1]
А разве в этом случае у нас не выберется текстовое содержимое всех нод? А с ограничителем — текстовое содержимое первой ноды вроде только…
А разве в этом случае у нас не выберется текстовое содержимое всех нод? А с ограничителем — текстовое содержимое первой ноды вроде только…
xsl:value-of вызывает функцию string:
A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned.
В силу спицифики работы (разработка XML парсера) накапливаеться огромное количество XSLT-шек, которые могут конфликтовать между собой при дольнейшей разработки.
И поэтому от записей типа ../../../@id или .//foo пришлось отказаться потому что:
1. плохочитабельно
2. подобнуй путь не гибок
Из опыта рекомендую ичпользовать оси, которые в данном топики были представленны как редкоиспользуемые почаще:)
PS
following-sibling::*[1]/self::foo
И поэтому от записей типа ../../../@id или .//foo пришлось отказаться потому что:
1. плохочитабельно
2. подобнуй путь не гибок
Из опыта рекомендую ичпользовать оси, которые в данном топики были представленны как редкоиспользуемые почаще:)
PS
following-sibling::*[1]/self::foo
сори за PS, он не несет смысловой нагрузки)
Я вообще когда начал использовать xslt учился на примерах, где подобных конструкций "../../../@id" не встречал в принципе. А работал только с осями. Поэтому для меня определение «редко используемые» было немножко неожиданным.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Три редкоиспользуемые оси в XPath