dポイントプレゼントキャンペーン実施中!

お世話になります。

<xsl:param name="A" select="1000">



<xsl:template name="B">



<xsl:for-each select=".//1000"> -(1)
</xsl:template>

<xsl:template match="1000"> -(2)
</xsl:template>

(1)
(1)の箇所の「1000」を上で宣言したAを使用したく、
<xsl:for-each select="concat('.//',$A")> 
など色々試したのですが、うまくいきませんでした。
(2)
(2)の箇所を「A」の変数に色々な形で置き換えてもうまくいきませんでした。

上記2点、を変数を使用して指定したいのですが、どのようにすれば実現できますでしょうか?

大変お手数とは思いますがよろしくお願いします。

A 回答 (1件)

<xsl:for-each select=".//1000"> -(1)


これでは,変数にする以前の問題として,まともに動かないのでは?
要素名の一文字目は数字にはできません。xpathも大丈夫でしょうか?
まず,変数にする前にきちんと動くようにしたとして,次に変数にするには,環境によって難易度が異なります。

xalanのようにdyn:evaluate()が使えるものは,要素名を変数に文字列として入れて,これをevaluate関数でノードセットに戻します。
概念的には,
 <xsl:variable name="hensu" select="'s1000'"/>
として,要素名を''で囲んで,文字列としてhensuに格納します。
これを使うときは,
 <xsl:for-each select="dyn:evaluate($hensu)">
などとしますが,evaluateの引数は,パーサによって異なります。

なお,msxmlは,そのまんまではevaluateを使えません。

次に,<xsl:template match="1000"> -(2)ですが,これを変数化するのは不可能だと思います。
match内のxpath表現をランタイムで変更できる仕様はないと思います(多分)。

variableもparamも,xsltの変数は,通常のプログラム言語の変数と異なり,とても制限が多く,使いづらいものなのです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!