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

XSLT中<xsl:for-each>遍历cmn:Serial失效,输出无序列号

问题分析与修复方案

嗨,我看了你的XML和XSLT代码,问题出在循环里的节点上下文处理错误啦。当你用<xsl:for-each select="cmn:Serial">遍历每个序列号节点时,当前的上下文已经是单个cmn:Serial节点了,但你在取值和判断的时候还是用了SerialNumbers/cmn:Serial这个路径——这相当于在当前cmn:Serial节点下去找子节点SerialNumbers/cmn:Serial,显然是找不到的,所以输出里就没有序列号内容了。

修正后的XSLT代码

<xsl:for-each select="cmn:Serial">
  <fieldvalidation>
    <validtedfield>Serial</validtedfield>
    <value><xsl:value-of select="."/></value>
    <xsl:choose>
      <xsl:when test=". != ''">
        <status>Valid</status>
        <reason></reason>
      </xsl:when>
      <xsl:otherwise>
        <status>Not Valid</status>
        <reason>Serial should not be empty.</reason>
      </xsl:otherwise>
    </xsl:choose>
  </fieldvalidation>
</xsl:for-each>

关键修改点说明

  • 取值部分:把<xsl:value-of select="SerialNumbers/cmn:Serial"/>改成<xsl:value-of select="."/>,这里的.代表当前上下文节点,也就是正在循环的那个cmn:Serial节点,这样就能正确获取每个序列号的文本内容了。
  • 空值判断:把<xsl:when test="SerialNumbers/cmn:Serial != ''">改成<xsl:when test=". != ''">,同样基于当前节点判断是否为空,逻辑才会正确。

另外还要注意一个前提:你的XSLT根节点<xsl:stylesheet>一定要正确声明cmn命名空间,比如像下面这样(替换成你实际的命名空间URI):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cmn="http://your-cmn-namespace-uri-here">
  <!-- 你的XSLT代码 -->
</xsl:stylesheet>

如果没声明命名空间,cmn:Serial这个选择器根本匹配不到任何节点,循环都不会执行哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:59