1

変換を適用すると、例外が発生します。式はノード セットに評価される必要があります。

  <xsl:for-each select = "some expression">
    <xsl:variable name="a0" select="some expression"/>
    <xsl:variable name="a1" select="some expression"/>
    <xsl:variable name="a2" select="some expression"/>

    <xsl:for-each select="$a0 | $a1 | $a2">
        <xsl:value-of select="."/>
        <xsl:if test="position()!=last()">,</xsl:if>
    </xsl:for-each>

  </xsl:for-each>

ここで、if ステートメントを最初のループのレベルに配置すると、変換を適切に適用できます。

「$a0 | $a1 | $a2」という式がノードセットと見なされないことが問題である場合、XSLT 1.0 を使用して同様の目標を達成するにはどうすればよいでしょうか?

4

1 に答える 1

3

エラーが示すように、XSLT 1.0 では、union 演算子を使用して、まだノードになっていないオペランドを結合することはできません。

functionをサポートするnode-set()XSLT プロセッサを使用している場合は、次のようにできます。

<xsl:for-each select="exsl:node-set($a0) | exsl:node-set($a1) | exsl:node-set($a2)">
    <xsl:value-of select="."/>
    <xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>

しかし、それを行う場合は、次のようにすることもできます。

<xsl:value-of select="concat($a0, ',', $a1, ',', $a2)" />

あなたが作成した最近の質問から判断すると、多くの変数がある可能性があります。その場合、おそらく設計を再考する必要があります。一般的なプレースホルダーの代わりにいくつかの詳細を提供できれば、おそらく誰かが別のアプローチについてアドバイスすることができます.

于 2013-02-04T20:51:36.470 に答える