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

如何使用XSLT 1.0修改XML的嵌套结构?

XSLT 1.0 解决方案

针对你需要将平级元素转为嵌套结构的需求,可以通过以下XSLT代码实现:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 默认模板:复制所有未被匹配的节点(保留table等外层结构) -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 专门处理CLASS元素,修改其子元素结构 -->
    <xsl:template match="CLASS">
        <xsl:copy>
            <!-- 第一步:按顺序输出所有子元素的开始标签 -->
            <xsl:for-each select="*">
                <xsl:element name="{name()}">
            </xsl:for-each>
            <!-- 第二步:闭合最后一个子元素(Weight)的标签 -->
            <xsl:element name="{name(*[last()])}"/>
            <!-- 第三步:倒序输出前面所有子元素的闭合标签 -->
            <xsl:for-each select="*[position() < last()]">
                <xsl:sort select="position()" data-type="number" order="descending"/>
                <xsl:element name="{name()}"/>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. 默认模板:确保外层的table元素以及其他未指定处理规则的节点被原样复制,避免结构丢失。
  2. CLASS元素处理模板:
    • 先遍历CLASS下的所有子元素,依次输出它们的开始标签(<Name>、<Sex>、<Age>、<Height>、<Weight>)。
    • 单独闭合最后一个子元素(Weight)的标签。
    • 对前面的子元素按位置倒序排序,依次输出它们的闭合标签(</Height>、</Age>、</Sex>、</Name>),从而形成嵌套结构。

这个方案完全基于XSLT 1.0语法,不需要额外扩展,适配你的需求场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:05:29