XSLT 3.0支持JSON怎么用 xml-to-json和json-to-xml函数

12次阅读

XSLT 3.0 原生支持 jsON 转换,核心是 json:json-to-xml() 和 json:xml-to-json() 函数,需声明命名空间 http://www.w3.org/2015/xpath-functions/json 并使用支持 XSLT 3.0 的处理器(如 Saxon 9.8+)。

XSLT 3.0支持JSON怎么用 xml-to-json和json-to-xml函数

XSLT 3.0 原生支持 JSON 转换,核心是 xml-to-json()json-to-xml() 两个函数,它们定义在 http://www.w3.org/2015/xpath-functions/json 命名空间下(通常绑定为 json)。使用前需声明命名空间,并确保处理器支持 XSLT 3.0(如 Saxon HE/PE/EE 9.8+、BaseX 9.6+)。

1. 使用 json-to-xml() 将 JSON 字符串转为 XML 格式

该函数把合法的 JSON 文本解析成一个标准的、可查询的 XML 结构(遵循 W3C JSON-to-XML mapping 规则),便于用 XPath 处理。

示例:将 JSON 字符串转为 XML 后提取字段

                         {$xml-json/map/String[@key='name']}       {$xml-json/map/number[@key='age']}       {$xml-json/map/Array/string[1]}         

注意:

  • 输入必须是合法 JSON 字符串(不能是已解析对象);
  • 输出 XML 遵循固定结构:map 表示对象,array 表示数组,string/number/Boolean/NULL 表示值,属性 @key 保留键名;
  • 若 JSON 解析失败,函数返回空序列(不会报错),建议配合 try/catch 捕获异常。

2. 使用 xml-to-json() 将符合规范的 XML 转回 JSON 字符串

该函数接受一个“JSON-aware” XML 结构(即由 json-to-xml() 生成或严格遵循其 schema 的 XML),输出格式化或紧凑的 JSON 字符串。

示例:构造 XML 再转为 JSON

        success     42            apple       banana           

输出(带缩进):

{   "status": "success",   "count": 42,   "items": ["apple", "banana"] }

关键点:

  • 输入 XML 必须在 http://www.w3.org/2015/xpath-functions/json 命名空间中,且结构合规(如 map 下直接子元素只能是 string/number 等,不能混用);
  • 第二个参数是可选的 options map,常用键包括:'indent'(布尔值)、'escape'(是否转义 Unicode)、'liberal'(是否允许非标准结构,仅部分处理器支持);
  • 若输入 XML 不符合 JSON 映射规则(如 map 中有非 key 属性),函数返回空序列。

3. 实际使用中的常见注意事项

这两个函数不是万能 JSON 工具,需注意边界和限制:

  • 不支持 JSON 注释或尾随逗号(非标准语法会解析失败);
  • JSON 键名若含特殊字符(如空格、点号),在 XML 中会自动转义为 @key 属性,但转回 JSON 时能还原;
  • XML 到 JSON 时,liberal 模式(如 Saxon 支持)可容忍某些宽松结构,但跨处理器兼容性差,慎用;
  • 大 JSON 文本转换可能影响性能,避免在循环中反复调用;
  • 若需处理流式 JSON 或部分解析,XSLT 3.0 不适用,应改用外部语言或专用 JSON 工具链。

4. 快速验证是否可用

样式表开头加一段测试代码:

    

输出 true 表示环境就绪。若为 false,说明处理器版本过低或未启用 XSLT 3.0 模式(如 Saxon 需用 -xsl:3.0 参数或设置 version="3.0")。

text=ZqhQzanResources