Неправильно полагать, что файл кода XSLT всегда содержит <xsl:template>
инструкцию .
Существуют примеры модулей таблицы стилей XSLT, в которых файл содержит только инструкцию <xsl:stylesheet>
и одну или несколько переменных глобального уровня.Такой модуль таблицы стилей обычно импортируется / включается в другой модуль таблицы стилей с использованием инструкции <xsl:import>
или <xsl:include>
.
Кроме того, то, что определяет XSLT, не является префиксом элементов, составляющих инструкции XSLT .Этот префикс не обязательно должен быть "xsl"
, и некоторые программисты используют разные префиксы, такие как "xslt"
или "x"
.
Что действительно определяет код XSLT, так это пространство имен XSLT .
Наконец, файл кода XSLT не гарантированно даже содержит директиву <xsl:stylesheet>
, поскольку XSLT предлагает синоним: <xsl:transform>
.
С учетом всехИз этих соображений лучшим тестом будет:
/*[contains('|stylesheet|transform|', concat('|', local-name(), '|')
and
namespace-uri()="http://www.w3.org/1999/XSL/Transform"
)
Поскольку существует возможность наличия встроенных таблиц стилей , тест, приведенный выше, можетбыть немного изменены, чтобы покрыть их также:
//*[contains('|stylesheet|transform|', concat('|', local-name(), '|')
and
namespace-uri()="http://www.w3.org/1999/XSL/Transform"
)