嘿,我有一个 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)
最佳答案
您没有使用变量name
里面xsl:choose
- 你在那里声明它。
在 xsl:when
中声明变量仅当您还在同一元素内使用此变量时才有意义。这是因为变量的范围。如果您在 xsl:when
内声明一个局部变量,您不能在外面使用它。
使用xsl:choose
仅当您测试至少两种不同的条件(其中之一在 xsl:when
内)时才有意义。 ,另一个在 xsl:otherwise
。如果只有一个条件,xsl:if
就足够了。
如果您公开更多的 XSLT 样式表,就有可能知道哪里出了问题。因此,请使用完整的输入 XML 和完整的 XSLT 样式表更新您的问题。
编辑:为了使这一点更清楚:不,不可能在其范围之外使用局部变量。如果您在 xsl:when
内声明一个变量您将永远无法在外部访问它。
关于java - 如何使用xsl :variable in xsl:choose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036622/