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

咨询:利用属性值创建新标签的XSLT转换实现方法

解决方案:用XSLT动态生成元素名处理可变列结构

完全可行,核心是利用XSLT的<xsl:element>指令动态创建元素,结合属性值拼接新标签名即可实现需求。以下是具体实现代码及说明:

输入XML示例

<root>
  <row>
    <column inum="1">第一列内容</column>
    <column inum="2">第二列内容</column>
  </row>
  <row>
    <column inum="1">另一行第一列</column>
    <column inum="3">另一行第三列</column>
  </row>
</root>

XSLT转换代码

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

  <!-- 匹配row下的column元素,动态生成新命名的元素 -->
  <xsl:template match="row/column">
    <!-- 拼接新元素名:column_ + inum属性值 -->
    <xsl:element name="column_{@inum}">
      <!-- 保留原column的所有内容(文本、子节点)及除inum外的其他属性 -->
      <xsl:apply-templates select="@*[not(local-name()='inum')]|node()"/>
    </xsl:element>
  </xsl:template>

  <!-- 移除原column的inum属性(已用于元素名,无需保留) -->
  <xsl:template match="column/@inum"/>
</xsl:stylesheet>

关键逻辑说明

  • 身份模板确保<root>、<row>等原有结构完全保留,只修改目标<column>元素。
  • <xsl:element name="column_{@inum}">通过大括号语法{@inum}提取属性值,动态拼接生成新元素名。
  • 最后一个模板专门过滤掉原<column>的inum属性,避免新元素携带冗余属性。

输出XML示例

<root>
  <row>
    <column_1>第一列内容</column_1>
    <column_2>第二列内容</column_2>
  </row>
  <row>
    <column_1>另一行第一列</column_1>
    <column_3>另一行第三列</column_3>
  </row>
</root>

该方案支持任意行数、列数的输入,只要<column>节点带有inum属性即可自动完成转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:40