Использование { ... }
для хранения выражений является функцией XSLT, а не XPath, поэтому вы не можете использовать ее в выражении XPath.
Если вы хотите вложить if
-выражения, подобные этому, то вам нужно сделать это в конструкциях XPath, и я считаю, что это означает использование concat()
в этом случае:
if (ancestor::table[@frame='all'])
then 'all_rules'
else concat(
'header_single',
if ($out) then concat('_',$out) else ''
)
Конечно, вам нужно использовать достаточно высокую версию XSLT, чтобы это работало. Это не будет работать в XSLT 1.0, поскольку он поддерживает только XPath 1.0, который не имеет if-
выражений.