如何使用 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()
` 函数的中间格式。
我在此处尝试使用 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 parameteromit-xml-declaration
set toyes
and with no other serialization parameters set.
换句话说,像 Saxon 这样的 XQuery 处理器应该将 XML 个节点序列化为 JSON 个字符串。
要实现 wikibook 文章所承诺的目标,您需要将文档转换为地图和数组,或者转换为可以提供给 xml-to-json()
` 函数的中间格式。