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