Нет необходимости xdmp:unquote
результата. json:transform-from-json
возвращает структуру XML, а не строковое представление. Передав его в xdmp:unquote
, вы заставляете MarkLogi c атомизировать аргумент, в результате чего получается строка с недопустимым символом в виде простого символа, а не в виде цифры c.
xdmp:unquote
не позволит MarkLogi c выдать ошибку на этом этапе, но вы все равно можете столкнуться с подобными проблемами в цепочке. MarkLogi c в настоящее время не поддерживает XPath 3.1, но вы можете манипулировать строкой JSON перед передачей ее в функцию преобразования. Возможно, не самый красивый, но это будет работать:
import module namespace json="http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
let $json1 := ' { "name":"John", "age":30, "text":"john\u001e" }'
let $json1 := replace($json1, '(\\u[0-9a-fA-F]{4})', '\\$1')
let $basic := json:config("basic")
let $basicXml := json:transform-from-json($json1, $basic)
return $basicXml
HTH!