我正在尝试使用WikiBooks中的“转换XML到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返回,我缺少什么?
答案 0 :(得分:1)
您引用的wikibook文章不正确。根据相关规范,XSLT和XQuery Serialization 3.1,JSON序列化方法处理XML节点as follows:
通过使用
json-node-output-method
参数指定的方法输出序列化节点的结果,将数据模型实例中的节点序列化为JSON字符串。该节点序列化,序列化参数omit-xml-declaration
设置为yes
,并且没有设置其他序列化参数。
换句话说,像Saxon这样的XQuery处理器应该将XML节点序列化为JSON字符串。
为了实现wikibook文章所承诺的目标,您需要将文档转换为地图和数组,或转换为可以提供给xml-to-json()
`函数的中间格式。