Почему xsl: result-document терпит неудачу внутриинструкция? - PullRequest
0 голосов
/ 24 ноября 2011

Я использую Saxon-EE 9.3.0.4 для преобразований xsl и обнаружил, что когда <xsl:result-document> используется внутри <xsl:attribute> (а также <xsl:namespace>, <xsl:processing-instruction>) инструкции, процессор повышает XTDE1480 ошибка - Невозможно переключиться на конечный результат назначения при записи временного дерева

<xsl:attribute name="a">
    <xsl:result-document href="result.xml" > - error here
        test
    </xsl:result-document>
</xsl:attribute>

В соответствии с спецификацией (Приложение D) разрешены родители для <xsl:result-document>:

  • любой элемент XSLT, модель содержимого которого является конструктором последовательности
  • любой элемент буквального результата

Это ошибка в Saxon или ограничения для <xsl:result-document> использования, которые не определены в спецификации?

Обновление: Я считаю, что это не очень хорошая идея использовать <xsl:result-document> внутри <xsl:attribute>, но почему возникает ошибка?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

В спецификации вы можете прочитать:

Инструкции в исходном шаблоне оцениваются в окончательном выводе государство. Инструкция оценивается в том же состоянии вывода, что и ее инструкция вызова, за исключением того, что xsl: variable, xsl: param, xsl: with-param, xsl: attribute, xsl: comment, xsl: инструкция обработки, xsl: пространство имен, xsl: значение-значения, xsl: функция, xsl: key, xsl: sort и xsl: message всегда оценивают инструкции в содержащийся в них конструктор последовательности во временном состоянии вывода.

Запись xsl: result-document в конечном результате в дереве, и, учитывая приведенное выше правило, я понимаю, что попытка записи в конечном результате в дереве является ошибкой, когда внутри следующих элементов

xsl: переменная, xsl: param, xsl: with-param, xsl: атрибут, xsl: комментарий, xsl: инструкция обработки, xsl: пространство имен, xsl: value-of, xsl: функция, xsl: ключ, xsl : sort и xsl: message

1 голос
/ 03 августа 2018

Обновление в 2018 году: обратите внимание, что спецификация XSLT 3.0 ослабляет ограничения. Такие инструкции, как xsl:attribute и xsl:comment, больше не устанавливают временное состояние вывода. Последние саксонские версии (конечно, 9.8) реализуют пересмотренные правила.

...