Saxon error "XPTY0019: Обязательным типом элемента первого элемента '/' является node (), при условии, что значение имеет тип элемента xs: string"

У меня есть XSL-программа, которая, в свою очередь, генерирует XSL-программу, которая в зависимости от ввода может выглядеть так:

 <!--empty in this particular case-->


    
...

Когда я запускаю сгенерированную таблицу стилей, Саксон, благослови его сердце, по-видимому, делает какой-то статический анализ и жалуется:

XPTY0019: Required item type of first operand of '/' is node(); supplied value has item type xs:string

и даже не будет составлять таблицу стилей.

Моим обходным путем было создание фиктивного элемента в наборе узлов $ patterns, но есть ли более чистый подход здесь или способ подавить ошибку компиляции?

1
nl ja de

2 ответы

Согласно http://www.w3.org/TR/xslt20/#variable-values : «Если элемент переменной-связывания имеет пустой контент и не имеет ни атрибута select, ни атрибута as, то поставляемое значение переменной является строкой нулевой длины».

So you need to change that, for instance by doing to bind an empty sequence as the variable value.

1
добавлено
Спасибо за информацию, проблема решена с помощью атрибута as = node() * .
добавлено автор user663031, источник

In XSLT 1.0 (the same would work also with XSLT 2.0) use:


Это предоставляет XSLT-процессору информацию, необходимую для вывода о том, что тип переменной $ patterns имеет набор узлов .

0
добавлено
Благодарю. Проблема в том, что XSLT генерируется «на лету», что-то похожее на (где tns - префикс пространства имен, сопоставленный с xsl на выходе), поэтому я не знаю заранее, будет ли переменная пустой или нет, поэтому атрибут as было идеальным решением для меня, видя, как я использую XSLT 2.0.
добавлено автор user663031, источник