2014-02-26 75 views
0

嘿,我有我想要在XSL使用一個XSL變量選擇標籤如何使用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) 

回答

3

你是不是使用變量name裏面的xsl:choose - 你聲明它那裏。

要聲明xsl:when中的變量,只有在同一元素內使用此變量時纔有意義。這是因爲範圍的一個變量。如果您在xsl:when內聲明瞭局部變量,則不能在外部使用它。

使用xsl:choose只有在測試至少兩個不同的條件時纔有意義,一個在xsl:when之內,另一個在xsl:otherwise之內。如果只有一個條件,xsl:if就足夠了。

如果您透露更多XSLT樣式表,可能會告訴您哪裏出錯了。因此,請使用完整的輸入XML和完整的XSLT樣式表更新您的問題。

編輯:爲了使其更清楚:不,它不可能在其作用域之外使用局部變量。如果你在xsl:when內聲明瞭一個變量,你將永遠無法訪問它。

+0

嘿我有更多的xslt樣式表。我認爲它的範圍問題,那麼我怎樣才能在外面使用這個變量,你可以建議我嗎? –

+0

@nrvmodi你試圖實現的是什麼(我認爲)是不可能的。看到我編輯的答案。 –

0

您可以使用全局變量

<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> 
+0

我同意你的看法,但我有很多變量,我想在條件基礎中定義它......這就是爲什麼我問,有沒有辦法做到這一點。 –

0

裏面如果你問這個問題:「我想寫+ 3 5」,你會得到答案「你做不到,語言不允許」。如果您將問題更改爲「我想添加三到五個」,人們會告訴您編寫「3 + 5」。所以請解釋你的問題,然後我們可以告訴你正確的編碼方式。通過查看不正確的代碼,我們無法弄清楚問題所在。