繁体   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