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

XSLT循环变量时无法读取源XML标签值的解决方法问询

XSLT 2.0 循环映射变量无法获取源XML标签值的修复方案

核心问题:上下文节点切换错误

循环attrMapping变量时,当前上下文是映射节点(而非源XML的<rootTag>),直接用相对路径无法定位到源节点的子标签,导致输出空的<Value>。

具体修改步骤

1. 提前捕获源XML的目标节点

在XSLT开头先定义变量获取源XML中<rootTag>节点,避免循环时上下文混乱:

<xsl:variable name="sourceRoot" select="/MainTag/rootTag"/>

2. 循环映射变量时,切换上下文到源节点

假设你的attrMapping定义类似:

<xsl:variable name="attrMapping">
  <map from="Tag1A" to="ValueA"/>
  <map from="Tag1B" to="ValueB"/>
  <map from="Tag1C" to="ValueC"/>
  <map from="Tag1D" to="ValueD"/>
</xsl:variable>

循环时,通过$sourceRoot结合映射的from属性定位源标签:

<xsl:for-each select="$attrMapping/map">
  <Value>
    <!-- 用XPath根据映射的标签名获取源节点文本 -->
    <xsl:value-of select="$sourceRoot/*[local-name() = current()/@from]"/>
    <!-- 或者XSLT 2.0支持的简化写法:直接构造节点名 -->
    <!-- <xsl:value-of select="$sourceRoot/{@from}"/> -->
  </Value>
</xsl:for-each>

3. 避免直接输出映射属性值

错误写法(直接输出字符串而非节点文本):

<!-- 错误:这只会输出"Tag1A"字符串,而非对应标签的文本 -->
<Value><xsl:value-of select="@from"/></Value>

必须通过XPath选择源XML中的对应元素,才能拿到实际文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:03:21