簡體   English   中英

如何在xsl:choose中使用xsl:variable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM