定义XSL变量而不更改类型

时间:2015-04-11 20:08:55

标签: java xslt

我的XSL文件中有一个变量。 Java将java.util.List返回到此变量

<xsl:variable name="testVariable" select="java:getJavaList()"/>

之后,这个vairable在Java中被用于将java.util.List作为参数

的方法
<xsl:variable name="anotherVariable">
    <xsl:value-of select="java:useTestVariable($testVariable)"/>
</xsl:variable>

现在需求已更改为根据特定条件设置testVariable值。我试过这种方法

    <xsl:variable name="testVariable">
        <xsl:choose>
            <xsl:when test="contains($oneMoreVariable, '%')">
                <xsl:value-of select="java:getValue('%')" />
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="java:getDefaulValue()" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

问题是,如果我以这种方式定义变量,它不包含List,而是包含树片段。我得到一个例外

  

对于扩展功能,找不到方法   MyClassName.useTestVariable([ExpressionContext,] #RTREEFRAG)

有人可以建议根据某些条件定义变量值的正确方法是什么,那么变量的类型不会随树片段改变?

2 个答案:

答案 0 :(得分:0)

我认为在XSLT 1.0中没有任何方法可以将定义为任何xsl:variable,而内容而不是select必须是结果树片段。但是既然你能够调用Java,就可以将条件逻辑放入Java函数中,然后从变量select中调用它。

答案 1 :(得分:0)

您是否已验证java:getValue('%')java:getDefaulValue()的结果,如果这些结果符合您的预期,仍然是片段,请参阅此链接https://blogs.oracle.com/rammenon/entry/result_tree_fragments_and_node