В XSLT 2.0 ваш код выглядит хорошо; в XSLT 1.0 он не смог бы сказать, что в выражении пути, таком как $v1/v2
, значение $ v1 должно быть набором узлов, а не результирующим деревом-фрагментом. Большинство процессоров XSLT 1.0 позволяют обойти это ограничение, используя xx:node-set($v1)/v2
, где xx привязан к некоторому suiutable пространству имен.
Версия XSLT зависит от того, какой процессор XSLT вы используете. Есть один или два процессора, которые запускают XSLT 1.0 или 2.0 в зависимости от того, что вы запрашиваете в атрибуте версии xsl: stylesheet, но процессор, написанный в XSLT 1.0 дней, не знает, как обрабатывать XSLT 2.0 и большинство процессоров XSLT 2.0 если они видят, что version = "1.0" в таблице стилей будет запускать XSLT 2.0 в режиме обратной совместимости, что не накладывает всех ограничений XSLT 1.0 (например, ограничение результирующего дерева), оно просто приводит к некоторым конструкциям путь 1.0 (например, xsl: value-of будет выводить только первый узел в последовательности узлов).
Было бы намного проще помочь вам, если бы вы сказали нам, что выводит ваш код.
XSLT1 или XSLT2? Ответ очень различен для обоих –
Я использую оператор If как: –
Я использую версию XSLT2 –