XML作为参数传递给XSL,无法使用Datapower转换为节点集

时间:2012-11-08 19:27:27

标签: xml xslt

我将下面的XML作为参数传递给我的XSL(通过Java)。

<roles><role>USA</role><role>GB</role><role>EU</role></roles>

我无法评估,但如果我在变量中定义完全相同的xml字符串,它可以正常工作。

我正在使用Datapower。

这是我的XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:exslt="http://exslt.org/common"
xmlns:dyn="http://exslt.org/dynamic"
>

<xsl:param name="roles"/>

<xsl:variable name="roles2"><roles><role>USA</role><role>GB</role><role>EU</role></roles></xsl:variable>

<xsl:template match="/">

    <xsl:if test="exslt:node-set($roles)/roles/role = 'GB'">
        YES 1
    </xsl:if>

    <xsl:if test="exslt:node-set($roles2)/roles/role = 'GB'">
        YES 2
    </xsl:if>

    <xsl:if test="$roles2/roles/role = 'GB'">
        YES 3
    </xsl:if>

    roles = <xsl:value-of select="$roles" />
    roles2 = <xsl:value-of select="$roles2" />

</xsl:template>

当我运行它时,我得到以下输出:

YES 2 YES 3 roles = <roles><role>USA</role><role>GB</role><role>EU</role></roles> roles2 = USAGBEU

有人可以帮助我了解正在发生的事情以及如何将其修复为YES 1吗?

感谢。

2 个答案:

答案 0 :(得分:1)

当您将其作为参数传递时,它是一个字符串值,而不是一个节点集。即它没有被解析为XML。 AFAIK没有办法在XSLT1或2上实现这一点。

答案 1 :(得分:0)

您可以使用exsl:node-set来解决此问题。