xsl:choose
(MSXML エンジンで使用するために) を使用して rtf からノード セット変数を作成することは可能ですか?
私は次の構造を持っています:
<xsl:choose>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:variable name="colorList" select="msxsl:node-set($std:colorList)"/>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="colorList" select="$std:colorList"/>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
std:colorList
もちろん木の断片です。上記は正常に動作し、コードは 2 つの代替案で同じですが、それほど大きくないため問題ありません。
しかし、より大きなコード フラグメントの場合、最初に rtf に基づいて変数を宣言してからコードを実行することで、コードの重複を回避できるかどうか疑問に思います。何かのようなもの
<xsl:variable name="colorList">
<xsl:choose>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:copy-of select="msxsl:node-set($std:colorList)"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$std:colorList"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
しかし、これは正しく機能しません。MSXMLcolorList
はノード セットではないというエラーを出すため、xsl:for-each
.
XSL transformation failed due to following error:
Expression must evaluate to a node-set.
-->$colorList<--/color
実際の例では、変数に「コピー」std:colorList
したため、このエラーは発生しなかったことに注意してください。colorList
どうやらこれは実行時エラーではなく、xsl 解析エラーです。
以外のものを使用する必要がありxsl:copy-of
ますか? または、同じことを達成する別の方法はありますか?
ご参考までに、std:colorList
内容は次のとおりです。
<std:colorList>
<color testid="111">#FF0000</color>
<color testid="999">#FFFF00</color>
</std:colorList>