XSLT 1.0中$Example/Details取值异常及SellStatus判断问题求助
XSLT 1.0 循环遍历Details节点问题解析与修复
问题现象原因
- 在
SellDetailsInfo模板的for-each循环中,$Example/Details是始终从传入的$Example节点根路径查找,而非当前迭代的节点。XSLT 1.0中xsl:value-of默认只返回匹配节点集的第一个节点文本内容,所以循环两次输出的都是第一个Details节点的内容,导致SellStatus永远显示AAA。 - 直接用
xsl:value-of select="$Example"会输出Example节点下所有文本的拼接结果,不符合拆分显示需求。
修复后的XSLT代码
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="xml" indent="yes"/> <xsl:template match="/root"> <xsl:apply-templates select="Example"/> <xsl:call-template name="SellDetailsInfo"> <xsl:with-param name="Example" select="Example"/> </xsl:call-template> </xsl:template> <xsl:template name="SellDetailsInfo"> <xsl:param name="Example"/> <!-- 遍历每个Details节点 --> <xsl:for-each select="$Example/Details"> <!-- 用.指代当前循环的Details节点 --> <DetailItem> <ItemTC> <xsl:value-of select="Item/@tc"/> </ItemTC> <!-- 根据SellStatus值生成对应标签 --> <xsl:choose> <xsl:when test="SellStatus = 'AAA'"> <StatusTag type="active"> <xsl:value-of select="SellStatus"/> </StatusTag> </xsl:when> <xsl:when test="SellStatus = 'BBB'"> <StatusTag type="inactive"> <xsl:value-of select="SellStatus"/> </StatusTag> </xsl:when> <xsl:otherwise> <StatusTag type="unknown"> <xsl:value-of select="SellStatus"/> </StatusTag> </xsl:otherwise> </xsl:choose> </DetailItem> </xsl:for-each> </xsl:template> </xsl:stylesheet>
关键修改说明
- 循环内部用
.代表当前迭代的Details节点,后续的Item/@tc、SellStatus均基于当前上下文查找,避免重复取第一个节点。 - 通过
xsl:choose分支判断SellStatus的值,为AAA、BBB及其他状态生成不同属性的StatusTag元素,满足差异化标签需求。 - 输出结构清晰,每个Details的商品编号和状态标签独立展示。
内容的提问来源于stack exchange,提问作者User_Earth_005
相关产品推荐
相关产品推荐

