#xslt
#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>
Комментарии:
1. Где определен этот $CouponID? Сам по себе этот код ничего не говорит.
Ответ №1:
Я думаю, что одна из потенциальных проблем заключается в том, что внешний 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 вместо вложения a value-of
.
Если у вас все еще есть проблемы, опубликуйте образец XML, который вы хотите обработать.
Ответ №2:
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">