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

如何在XSL属性中填充id值?XML转XML的XSLT转换求助

解决XSLT生成带指定格式id属性的ParentElement元素问题

原代码的问题分析

  • 模板匹配的是ParentElement/Number,仅处理Number元素而非目标的ParentElement,导致原ParentElement被默认模板处理,直接输出子节点文本。
  • 未使用<xsl:attribute>生成id属性,而是直接输出字符串,无法构建正确的元素结构。
  • 不必要的<xsl:apply-templates>会重复处理Number的内容,引发冗余输出。

正确的XSLT实现

假设源XML结构如下(以常见场景为例):

<Root>
  <ParentElement>
    <Number>12345.111111.0</Number>
  </ParentElement>
</Root>

对应的XSLT代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 处理根节点,触发后续模板 -->
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <!-- 匹配源文档中的ParentElement元素 -->
  <xsl:template match="ParentElement">
    <!-- 生成目标ParentElement元素 -->
    <ParentElement>
      <!-- 拼接固定前缀与Number值,生成指定格式的id属性 -->
      <xsl:attribute name="id">
        <xsl:text>abc:efg:id:hij:</xsl:text>
        <xsl:value-of select="Number"/>
      </xsl:attribute>
      <!-- 若需保留原ParentElement的其他子节点,取消下方注释 -->
      <!-- <xsl:apply-templates/> -->
    </ParentElement>
  </xsl:template>

  <!-- 屏蔽Number元素的默认输出,避免冗余文本 -->
  <xsl:template match="Number"/>
</xsl:stylesheet>

代码说明

  1. 直接匹配ParentElement,确保完全控制目标元素的生成逻辑。
  2. 使用<xsl:attribute>创建id属性,通过固定前缀abc:efg:id:hij:与Number元素的文本值拼接,得到要求的id格式。
  3. 添加空模板匹配Number元素,防止其文本被默认模板直接输出。
  4. 若需要保留原ParentElement的其他子节点,取消<xsl:apply-templates/>的注释即可。

输出结果

执行上述XSLT后,会生成符合要求的目标元素:

<ParentElement id="abc:efg:id:hij:12345.111111.0"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:12:59