سؤال

لدي ملف xsl يلتقط المتغيرات من xml ويبدو أنهم غير قادرين على رؤية بعضهم البعض.أعلم أنها مشكلة تتعلق بالنطاق، لكني لا أعرف ما الخطأ الذي أفعله.

<xsl:template match="one">
 <xsl:variable name="varOne" select="@count" />
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>

لقد تم تبسيط هذا هنا.

هو موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

تذكر أن متغيرات xsl غير قابلة للتغيير ...

<!-- You may want to use absolute path -->
<xsl:variable name="varOne" select="one/@count" />

<xsl:template match="one">
<!-- // do something --> 
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>

نصائح أخرى

يمكنك أيضًا حل بعض مشكلات تحديد النطاق عن طريق تمرير المعلمات...

<xsl:apply-templates select="two">
 <xsl:with-param name="varOne">
  <xsl:value-of select="one/@count"/>
 </xsl:with-param>
</xsl:apply-templates>

<xsl:template match="two">
 <xsl:param name="varOne"/>
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>

أنا متأكد تمامًا من أن المتغيرات محددة النطاق وبالتالي لا يمكنك الإعلان عن متغير في أحدهما ثم استخدامه في الآخر.سيتعين عليك نقل إعلان المتغير الخاص بك خارج القالب بحيث يكون في نطاق أعلى من كليهما.

نطاق المتغير في XSLT هو العنصر المحيط به.لجعل المتغير مرئيًا لعناصر متعددة، يجب أن يكون إعلانه على نفس المستوى أو أعلى من تلك العناصر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top