[英]How to use xsl:variable in xsl:choose
嘿,我有一個要在xsl選擇標記中使用的xsl變量
<xsl:template match="/">
<xsl:choose>
<xsl:when test="1 eq whatever">
<xsl:variable name="name" select="Person/Name"/>
</xsl:when>
</xsl:choose>
</xsl:template>
它將給出異常
javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:828)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:617)
at com.navaera.sunflower.set.util.XmlElementsBuilder.getXMLOutput(XmlElementsBuilder.java:189)
您沒有在xsl:choose
使用變量name
-在此處聲明它。
在xsl:when
內聲明變量xsl:when
僅當您還在同一元素內使用此變量時才有意義。 這是因為變量的范圍 。 如果在xsl:when
內聲明局部變量,則不能在外部使用它。
僅當您測試至少兩個不同的條件時才使用xsl:choose
才有意義,一個條件在xsl:when
內部,另一個條件在xsl:otherwise
。 如果只有一個條件,則xsl:if
就足夠了。
如果您揭示了更多的XSLT樣式表,則可能可以判斷出哪里出錯了。 因此,請使用完整的輸入XML和完整的XSLT樣式表來更新您的問題。
編輯 :使其更加清楚:不,不可能在其范圍之外使用局部變量。 如果在xsl:when
聲明變量,則永遠無法在外部訪問它。
您可以使用全局變量
<xsl:variable name="name" select="Person/Name"/>
並在模板中調用它
<xsl:template match="/">
<xsl:choose>
<xsl:when test="1 eq whatever">
<xsl:value-of select="$name"/>
</xsl:when>
</xsl:choose>
</xsl:template>
如果您問“我要寫+ 3 5”問題,您將得到答案“您不能這樣做,語言不允許這樣做”。 如果您將問題更改為“我想加三到五”,人們會告訴您寫“ 3 + 5”。 因此,請解釋您的問題,然后我們可以告訴您正確的編碼方式。 通過查看錯誤的代碼,我們無法解決問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.