xsl:choose
(MSXMLエンジンで使用する)を使用してrtfからノードセット変数を作成することはできますか?<xsl:choose>を使用して結果ツリーフラグメントからノードセット変数を構築する
<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
はもちろんのツリーフラグメントである:
しかし、コードフラグメントを大きくすると、最初に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>
のようなもの。しかし、これは正しく動作しません:MSXML約colorList
は、ノードセットされていない文句を言い、それはxsl:for-each
で使用することはできません。実施例では、このエラーがcolorList
変数にあるため、「コピー」std:colorList
の発生しなかったことを
XSL transformation failed due to following error:
Expression must evaluate to a node-set.
-->$colorList<--/color
は注意してください。どうやらこれはxsl解析エラーであり、実行時エラーではありません。
xsl:copy-of
以外のものを使用しますか?あるいは、同じことを達成する別の方法がありますか?あなたが疑問に思う場合
次のように、std:colorList
内容は以下のとおりです。XSLT 1.0で残念ながら
<std:colorList>
<color testid="111">#FF0000</color>
<color testid="999">#FFFF00</color>
</std:colorList>
ノードセットにRTFに変換するというか、私はXSLT 1.0 :-)を使用して主張しているユーザーのための私の答えにこれを組み込む予定!。 – Maestro13
Hm pity - 前と同じエラーが出ます - 明らかに、テンプレートに与えられた選択値はノードセットでなければなりません...前と同じトリックでした:$ std:colorListを新しい変数にコピーし、それをテンプレートにフィードします。 – Maestro13