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

如何使用XSL将JSON转换为以键名为标签的自定义XML结构?

解决方案

不需要额外执行第二次XSL转换,你可以在同一份XSLT 3.0样式表内完成「JSON转中间XML」+「中间节点转目标结构」两步逻辑,一步生成期望的输出。

修正后的XSL代码

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs math fn" 
    version="3.0">
    <xsl:output indent="yes" omit-xml-declaration="yes" />
    
    <!-- 匹配根data节点,先转JSON为中间XML,再应用转换模板 -->
    <xsl:template match="data">
        <xsl:apply-templates select="json-to-xml(.)/fn:map/fn:*" />
    </xsl:template>
    
    <!-- 匹配JSON对象对应的map节点,用key属性作为新标签名 -->
    <xsl:template match="fn:map[@key]">
        <xsl:element name="{@key}">
            <xsl:apply-templates select="fn:*" />
        </xsl:element>
    </xsl:template>
    
    <!-- 匹配JSON字符串/数值等类型节点,用key属性作为新标签名,保留文本内容 -->
    <xsl:template match="fn:*[@key and not(*)]">
        <xsl:element name="{@key}">
            <xsl:value-of select="." />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 首先给http://www.w3.org/2005/xpath-functions命名空间声明fn前缀,用于匹配json-to-xml()生成的默认带命名空间的节点
  • 不再直接copy-of输出中间XML,而是对中间节点树应用自定义模板
  • 通用模板自动将所有带key属性的节点转换为以key值为标签名的节点,同时递归处理子节点,适配嵌套的JSON结构

注意事项

如果你的实际JSON数据中存在不符合XML元素命名规范的键名(如包含空格、数字开头、特殊符号等),需要在生成<xsl:element>前对@key值做合法性转义处理,避免转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:06