You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT 3.0中从JSON数组提取数据并生成指定XML

使用Saxon-HE v11.4(XSLT 3.0)实现JSON转指定格式XML

需求说明

  • 基于Java环境,借助Saxon-HE v11.4库的XSLT 3.0能力,将包含数组结构的JSON转换为指定格式的XML
  • 提取JSON数组中的每个元素,为对应的XML节点添加数组索引属性indexarray

输入输出示例

输入JSON

{
  "Details":{
    "name":["a","b","c"]
  }
}

期望输出XML

<Details>
  <name indexarray="0">a</name>
  <name indexarray="1">b</name>
  <name indexarray="2">c</name>
</Details>

XSLT 3.0转换脚本

创建json-to-xml.xsl文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:map="http://www.w3.org/2005/xpath-functions/map"
                xmlns:array="http://www.w3.org/2005/xpath-functions/array"
                exclude-result-prefixes="map array">

  <xsl:output method="xml" indent="yes"/>

  <!-- 主模板:将输入JSON转换为临时XML结构后继续处理 -->
  <xsl:template match="/">
    <xsl:variable name="json-xml" select="json-to-xml(.)"/>
    <xsl:apply-templates select="$json-xml/*"/>
  </xsl:template>

  <!-- 处理Details节点 -->
  <xsl:template match="*[@key='Details']">
    <Details>
      <xsl:apply-templates select="*"/>
    </Details>
  </xsl:template>

  <!-- 遍历name数组,生成带索引属性的name节点 -->
  <xsl:template match="*[@key='name' and array:is-array(.)]">
    <xsl:for-each select="array:flatten(.)/*">
      <name indexarray="{position() - 1}">
        <xsl:value-of select="."/>
      </name>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

Java调用代码示例

引入依赖(Maven)

<dependency>
  <groupId>net.sf.saxon</groupId>
  <artifactId>Saxon-HE</artifactId>
  <version>11.4</version>
</dependency>

转换执行代码

import net.sf.saxon.s9api.*;
import java.io.File;
import java.io.FileOutputStream;

public class JsonToXmlConverter {
    public static void main(String[] args) throws Exception {
        // 初始化Saxon处理器
        Processor processor = new Processor(false);
        XsltCompiler compiler = processor.newXsltCompiler();

        // 加载XSLT转换脚本
        XsltExecutable executable = compiler.compile(new File("json-to-xml.xsl"));
        XsltTransformer transformer = executable.load();

        // 读取输入JSON文件
        DocumentBuilder builder = processor.newDocumentBuilder();
        XdmNode input = builder.build(new File("input.json"));
        transformer.setInitialContextNode(input);

        // 设置XML输出目标
        Serializer serializer = processor.newSerializer(new FileOutputStream("output.xml"));
        serializer.setOutputProperty(Serializer.Property.INDENT, "yes");
        transformer.setDestination(serializer);

        // 执行转换
        transformer.transform();
    }
}

内容的提问来源于stack exchange,提问作者user20527766

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:01:52