Сбой запроса с динамической ошибкой: невозможно сериализовать карту с помощью этого метода вывода

Это должна быть проблема новичков, так как я только начинаю с XQuery. Мне удалось создать простой XQuery для eXist, который запускает преобразование XSL. Но мне не удалось создать аналогичный XQuery для Saxon (9.9.1.5J), который запускает преобразование XSL.

Рабочий XQuery для eXist:

xquery version "3.0";
transform:transform(doc("sample.xml"), doc("sample.xsl"), ())

Ошибка XQuery для Saxon:

xquery version "3.1";
transform(map{'source-node': doc('sample.xml'),'stylesheet-node':doc('sample.xsl')})

Ошибка, о которой сообщает Saxon:

Сбой запроса с динамической ошибкой: невозможно сериализовать карту с помощью этого метода вывода

Я искал эту ошибку в Google и SO, но ничего не нашел. Я пробовал это с объявлением вывода и без него, а также с объявлением вывода в XSL и без него. Я пробовал это с помощью fn:transform() и transform(). Я также добавил объявление для пространства имен fn. Преобразование работает из командной строки Saxon и из eXist. Поэтому мне, должно быть, не хватает чего-то простого в построении карты для опций fn:transform().

1 ответ

Решение

Результатом функции fn:transform() является карта, и похоже, что вы выполняете запрос таким образом, чтобы результат запроса сериализовался с использованием метода вывода XML по умолчанию. Попытка сериализовать карту с использованием метода вывода XML не удастся.

В зависимости от того, чего именно вы хотите достичь, вы можете сделать несколько вещей. Самым простым решением может быть изменение текста запроса на

transform(map{'source-node': doc('sample.xml'),'stylesheet-node':doc('sample.xsl')}) 
   ? output

в этом случае результатом будет основной документ результата преобразования, который, вероятно, вас больше всего интересует.

Другие вопросы по тегам