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

如何使用XSLT将父Property元素重命名为Property加对应子Key值的格式

调整方案

你原有代码存在三个核心问题:未定义$key变量就调用、没有拼接「Property」前缀、未保留Property节点的子结构。下面提供两种可行实现:

完整可运行的XSLT实现(推荐,使用模板匹配更符合XSLT规范)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 通用复制模板:所有不需要修改的节点和属性直接原样复制 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 单独匹配Data下的Property节点做重命名处理 -->
    <xsl:template match="Data/Property">
        <!-- 直接用属性值模板拼接新节点名 -->
        <xsl:element name="Property{Key/text()}">
            <!-- 复制当前Property下的所有子内容 -->
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

基于你原有for-each写法的修改版

<xsl:for-each select="Data/Property">
    <xsl:element name="Property{Key}">
        <!-- 保留Property下的所有子节点 -->
        <xsl:copy-of select="node()"/>
    </xsl:element>
</xsl:for-each>

核心逻辑说明

  • 使用{}属性值模板可以直接在属性中嵌入XPath表达式,无需额外定义变量存储Key值
  • 不需要手动输出Key的值,直接复制原有子节点即可保留完整结构
  • 两种写法都可以输出你预期的XML结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:03