嘿我有一个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)
答案 0 :(得分:3)
你不是在name
内使用变量xsl:choose
- 你在那里声明。
如果你在同一个元素中也使用了这个变量,那么在xsl:when
中声明一个变量才有意义。这是因为变量的范围。如果在xsl:when
内声明局部变量,则无法在外部使用它。
如果您测试至少两个不同的条件,xsl:choose
只有xsl:when
,另一个在xsl:otherwise
内。如果只有一个条件,xsl:if
就足够了。
如果您透露更多的XSLT样式表,则可能会告诉您哪里出错了。因此,请使用完整的输入XML和完整的XSLT样式表更新您的问题。
编辑:为了使其更清晰:不,不可能在其范围之外使用局部变量。如果您在xsl:when
内声明变量,则永远无法在外部访问它。
答案 1 :(得分: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>
答案 2 :(得分:0)
如果你问“我想写+ 3 5”这个问题,你会得到答案“你做不到,语言不允许”。如果您将问题更改为“我想添加三到五”,人们会告诉您写“3 + 5”。所以请解释你的问题,然后我们可以告诉你正确的编码方式。我们无法通过查看错误的代码来解决问题所在。