java - 如何使用xsl :variable in xsl:choose

标签 java xml xslt

嘿,我有一个 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/

相关文章:

java - XSLT - 迭代列表时访问 Java 对象时出错

xml - xsl获取子节点

java - Java 中的 OpenMP 任务

java - Eclipse 大纲 View - 如何隐藏不推荐使用的方法

java - org.dom4j.io.SAXReader.read(Reader reader) 方法是否保留 XML 元素和属性的顺序

java - 这相当于在 XML 配置文件中使用 @Autowire 注释 Autowiring 接口(interface)?

java - 来自数据库的动态列表的 Spring 依赖注入(inject)

java - 需要 java double 才能不向下舍入

javascript - 使用 ajax 读取 XML 节点

html - 如何向 XML 添加可点击的链接?