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

如何用简短XSLT实现XML属性转子元素(无需预知元素名)

通用XSLT脚本:将XML属性转为子元素

以下是一段通用XSLT脚本,无需预先知晓XML元素名称,即可把所有元素的属性转换为对应子元素,同时保留原有子元素结构:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 复制所有元素节点,处理属性转子元素逻辑 -->
    <xsl:template match="*">
        <xsl:element name="{name()}">
            <!-- 遍历当前元素的所有属性,转为子元素 -->
            <xsl:for-each select="@*">
                <xsl:element name="{name()}">
                    <xsl:value-of select="."/>
                </xsl:element>
            </xsl:for-each>
            <!-- 递归处理子元素,保留原有结构 -->
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <!-- 保留文本、注释、处理指令节点内容 -->
    <xsl:template match="text()|comment()|processing-instruction()">
        <xsl:copy/>
    </xsl:template>
</xsl:stylesheet>

脚本说明

  • 第一个模板匹配所有元素节点:先复制当前元素标签,再遍历其所有属性,将属性名作为子元素名、属性值作为子元素文本内容;接着递归处理原元素的子节点,保证原有子元素结构不受影响。
  • 第二个模板负责保留文本、注释和处理指令,避免内容丢失。

示例输入XML

<offers>
    <o id="2801" url="https://url/" price="169.14" avail="1" weight="1"
       stock="160" basket="1">
        <cat><![CDATA[Perfumy męskie]]></cat>
        <name><![CDATA[4711, 4711, woda kolońska, 800 ml]]></name>
        <imgs>
            <main url="https://teewy.pl/wp-content/uploads "/>
        </imgs>
    </o>
</offers>

转换后输出XML

<offers>
    <o>
        <id>2801</id>
        <url>https://url/</url>
        <price>169.14</price>
        <avail>1</avail>
        <weight>1</weight>
        <stock>160</stock>
        <basket>1</basket>
        <cat>Perfumy męskie</cat>
        <name>4711, 4711, woda kolońska, 800 ml</name>
        <imgs>
            <main>
                <url>https://teewy.pl/wp-content/uploads </url>
            </main>
        </imgs>
    </o>
</offers>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:13:22