переменная внутри секунды для цикла - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь напечатать значение переменной в секунду для цикла 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 ]

2 голосов
/ 18 октября 2011

Я думаю, что одна потенциальная проблема заключается в том, что внешний 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 голос
/ 18 октября 2011

Атрибут select вложенного xsl:for-each ничего не выбирает, и поэтому его тело не выполняется ни разу .

Внутри xsl:for-each ваш текущий узел имеет вид:

CampaignData/Mailer/CustomerInfo/CustInfFld/Coupons/Cust_Sel_Coupons

Атрибут select внутреннего xsl:for-each указывает:

CampaignData/Mailer/Coupons/Cntr_Sel_Coupons

это относительное выражение XPath, и оно разрешается из текущего узла. Таким образом, указанный select для внутреннего xsl:for-each на самом деле (снаружи внешнего xsl:for-each):

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

Маловероятно, что в исходном XML-документе есть такие узлы, которые вы не показывали.

Не имея исходного XML, невозможно сказать, каким именно должно быть относительное выражение - скорее всего:

Изменение:

<xsl:for-each select=
     "CampaignData/Mailer/Coupons/Cntr_Sel_Coupons"> 

до:

<xsl:for-each select=
     "../../../../Coupons/Cntr_Sel_Coupons"> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...