Fiddle 使用XSLT解析非包装的json

Fiddle 使用XSLT解析非包装的json

问题描述

在所有我看过的将json转换为xml的xslt示例中,json在使用json-to-xml()函数进行处理之前总是被包装在xml标签中。我想知道是否有可能在不包装json的情况下进行转换。我一直在尝试这个 xslt示例 但是没有成功,但是如果我将其包装在 <data></data> 然后将输入类型更改为xml,它就可以工作了。有人对如何使xslt在fiddle中与裸json一起工作有任何指导吗?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:template match="/">
      <xsl:copy-of select="json-to-xml(.)"/>
  </xsl:template>

</xsl:stylesheet>

解决方案

我不确定Fiddle如何调用Saxon,但我猜想当你将输入类型选择为JSON时,它实际上解析JSON并将生成的映射和数组结构作为初始上下文项。不幸的是,json-to-xml()函数期望未解析的词法JSON作为输入,所以我唯一能让它工作的方式是重新序列化JSON,就像这样:

<xsl:template match=".">
      <xsl:copy-of select="serialize(., 
         map{'method':'json'}) => json-to-xml()"/>
</xsl:template>

注意match="."而不是match="/",因为”/”只会匹配XML文档的根,而”.”将匹配任何内容。

如果不受Fiddle实现方式限制,您可以将JSON内容作为字符串或文件的URI提供给样式表,然后可以使用unparsed-text()来读取。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

HTML 精选笔记