第二个for循环中的变量

时间:2011-10-18 10:32:16

标签: xslt

我正在尝试在xslt的循环中打印变量值但不显示 这是我的代码

<xsl:for-each select="CampaignData/Mailer/CustomerInfo/CustInfFld/Coupons/Cust_Sel_Coupons">
                <xsl:sort select="@CouponPosition"/>
                    <xsl:variable name="CouponID">
                        <xsl:value-of select="@CouponID"/>
                    </xsl:variable>

                        <xsl:for-each select="CampaignData/Mailer/Coupons/Cntr_Sel_Coupons">
                        <div style='color:red;'><xsl:value-of select='$CouponID'/></div>

                </xsl:for-each>
            </xsl:for-each>

2 个答案:

答案 0 :(得分:2)

我认为一个潜在的问题是外部for-each更改了上下文节点,因此内部for-each需要考虑到这一点:

<xsl:for-each select="CampaignData/Mailer/CustomerInfo/CustInfFld/Coupons/Cust_Sel_Coupons">
    <xsl:sort select="@CouponPosition"/>
    <xsl:variable name="CouponID" select="@CouponID"/>
    <xsl:for-each select="ancestor::CampaignData/Mailer/Coupons/Cntr_Sel_Coupons">
        <div style='color:red;'><xsl:value-of select='$CouponID'/></div>
    </xsl:for-each>
</xsl:for-each>

我还更改了变量的代码,只需在select属性中编写要选择的表达式,而不是嵌套value-of

如果您仍有问题,请发布您要处理的XML样本。

答案 1 :(得分:1)

嵌套select的{​​{1}}属性不会选择任何内容,这就是为什么它的主体甚至不会被执行

在内部xsl:for-each内部,当前节点的格式为:

xsl:for-each

内部CampaignData/Mailer/CustomerInfo/CustInfFld/Coupons/Cust_Sel_Coupons 的select属性指定:

xsl:for-each

这是相对 XPath表达式,它从当前节点解析。因此,内部CampaignData/Mailer/Coupons/Cntr_Sel_Coupons 的指定select实际上是(来自外部xsl:for-each之外):

xsl:for-each

源XML文档中很可能没有显示任何此类节点。

如果没有源XML,就无法确定相对表达式应该是什么 - 最有可能:

变化:

CampaignData/Mailer/CustomerInfo/CustInfFld/Coupons/Cust_Sel_Coupons
                                /CampaignData/Mailer/Coupons/Cntr_Sel_Coupons

为:

<xsl:for-each select=
     "CampaignData/Mailer/Coupons/Cntr_Sel_Coupons"> 
相关问题