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

XSL如何使用for-each创建对应BlobContent Name属性的自定义子节点

解决方案

你不需要额外添加for-each逻辑,直接修改匹配Reference节点的模板即可,修改后的完整XSLT代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs"
  version="2.0">

  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/doc/att/BlobContent/Reference">
    <!-- 取当前Reference父节点BlobContent的Name属性作为新元素名 -->
    <xsl:element name="{../@Name}">
      <xsl:value-of select="@Link"/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

说明

你之前报错是因为添加for-each逻辑时一次性选中了所有BlobContent节点的Name属性,导致多个属性值被拼接成了非法的元素名。XSLT的模板匹配机制本身会自动为每个符合规则的Reference节点单独执行一次模板逻辑:

  • 用../@Name获取当前Reference节点所属的BlobContent节点的Name属性值
  • 通过属性值模板{}将属性值动态设置为新元素的名称

执行代码后会按预期输出<rtf>和<tif>标签,对应各自的Link路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:00