如何使用 xslt-xquery-serialization 命名空间导出到 JSON

How to use the xslt-xquery-serialization namespace to export to JSON

我在此处尝试使用 WikiBooks 中的 "Convert XML to JSON" 示例 https://en.wikibooks.org/wiki/XQuery/Convert_XML_to_JSON

xquery version "3.0";

declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method "json";
declare option output:media-type "application/json";

let $test := <root>
  <!-- simple elements -->
  <aaa>AAA</aaa>
  <bbb>BBB</bbb>
  <ccc>CCC</ccc>
  <!-- complex (nested) element -->
  <ddd>
     <eee>
        <fff>
           <ggg>GGG</ggg>
        </fff>
     </eee>
  </ddd>
  <!-- duplicate elements -->
  <hhh>HHH1</hhh>
  <hhh>HHH2</hhh>
  <hhh>HHH3</hhh>
  <hhh>HHH4</hhh>
  <!-- attributes -->
  <iii a1="123" a2="456" a3="789"/>
  <!-- attributes with text content-->
  <jjj a1="123" a2="456" a3="789">JJJ</jjj>
</root>

return $test

我正在通过此命令行使用 Saxon 解析器

java -cp Saxon-HE-9.8.0-8.jar net.sf.saxon.Query xml2json.xqy

但它仍然返回 $test 变量作为 xml,我错过了什么?

您引用的维基百科文章不正确。根据相关规范 XSLT 和 XQuery Serialization 3.1,JSON 序列化方法将 XML 个节点 as follows:

A node in the data model instance is serialized to a JSON string by outputting the result of serializing the node using the method specified by the json-node-output-method parameter. The node is serialized with the serialization parameter omit-xml-declaration set to yes and with no other serialization parameters set.

换句话说,像 Saxon 这样的 XQuery 处理器应该将 XML 个节点序列化为 JSON 个字符串。

要实现 wikibook 文章所承诺的目标,您需要将文档转换为地图和数组,或者转换为可以提供给 xml-to-json()` 函数的中间格式。