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

如何用XSLT将根元素下所有内容转为新元素的子元素?

XSLT实现根元素下嵌套新元素的方案

核心思路

  • 保留源XML根元素的名称与属性,仅修改其内部结构
  • 在根元素内创建自定义名称的新元素,作为原根元素所有子内容的容器
  • 通过模板匹配机制,确保原根元素下的所有节点(包括元素、文本、注释等)完整迁移到新元素中

实现代码

<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>

    <!-- 匹配根元素,重构其内部结构 -->
    <xsl:template match="//*">
        <xsl:copy>
            <!-- 复制根元素的所有属性 -->
            <xsl:apply-templates select="@*"/>
            <!-- 自定义新元素名称,可根据需求修改为任意名称 -->
            <wrapper>
                <!-- 将原根元素下的所有子节点迁移到新元素内 -->
                <xsl:apply-templates select="node()"/>
            </wrapper>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. 身份模板:作为基础模板,负责复制所有未被特殊匹配的节点和属性,确保XML中除根元素内部结构外的内容完全保留。
  2. 根元素匹配模板:
    • <xsl:copy>:保留原根元素的标签名称
    • <xsl:apply-templates select="@*"/>:复制根元素的所有属性(如果存在)
    • 自定义<wrapper>元素:你可以将这个名称替换为任何需要的元素名(比如<content>)
    • <xsl:apply-templates select="node()"/>:将原根元素下的所有子节点(包括文本、注释、处理指令等)全部复制到新元素内部

示例效果

源XML:

<root data-id="123">
    <item>示例内容</item>
    <!-- 测试注释 -->
    这是文本节点
</root>

转换后XML:

<root data-id="123">
    <wrapper>
        <item>示例内容</item>
        <!-- 测试注释 -->
        这是文本节点
    </wrapper>
</root>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:20:29