2

次の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に修正する方法が表示されるのを理解するのを手伝ってもらえますか?

ありがとう。

4

2 に答える 2

1

パラメータとして渡す場合、それは文字列値であり、ノードセットではありません。つまり、XMLとして解析されていません。AFAIKXSLT1または2でこれを実現する方法はありません。

于 2012-11-08T20:13:08.143 に答える
0

exsl:node-setを使用して、この問題を解決できます。

于 2016-06-02T13:24:08.840 に答える