代码之家  ›  专栏  ›  技术社区  ›  Joseph McCarthy

如何使用xslt xquery序列化命名空间导出到JSON

  •  2
  • Joseph McCarthy  · 技术社区  · 6 年前

    我试图在这里使用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
    

    但它仍然以xml形式返回$test变量,我缺少了什么?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Joe Wicentowski    6 年前

    您引用的wikibook文章不正确。根据相关规范XSLT和XQuery序列化3.1,JSON序列化方法处理XML节点 as follows :

    通过使用指定的方法输出序列化节点的结果,将数据模型实例中的节点序列化为JSON字符串 json-node-output-method 参数使用serialization参数序列化节点 omit-xml-declaration 设置为 yes 并且没有设置其他序列化参数。

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

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