No.2ベストアンサー
- 回答日時:
なるほど。
補足していただいた説明で、質問の意味は分かりました。XSLTの仕様上は、xsl:stylesheetの子要素としてxsl:param要素を置いた場合、そこから後ろのxsl:templateでは参照できるはずです。
そこで、以下のような短いXSLTスタイルシートを用意して、
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="n" select="test"/>
<xsl:template match="abc[@attr=$n]">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="@* | text()"></xsl:template>
</xsl:stylesheet>
以下のXMLファイルに適用してみたところ、
<data>
<abc attr="test1">item1</abc>
<abc attr="test">item2</abc>
<abc attr="test2">item3</abc>
</data>
Xalanでは正しく item2 と出力されました。
しかしXTでは、何も出力されず、XTのオプションで n=test のようにパラメータを設定すると、正しく出力されました。
私の解釈では、Xalanの動作の方が正しいような気がします。
したがって、もしXTを使っているならば、この実装上の違いが原因かと思われます。
この場合、XTの作者に直してもらうか、Xalanなど別のXSLTプロセッサを使うしか、解決方法はないかもしれません。
ありがとうございました。
パラメータの値を外部から渡すことを意図していたので、目的はかなえることができました。
質問前に実行すべきでしたが、問題の範囲を狭くした上でのテストというつもりで、躓いてしまっていたので、たいへん助かりました。
No.1
- 回答日時:
「xsl:param要素を」という意味がよく分からないのですが、parameterの値を参照するには$記号を以下のように使います。
nというparameterにtestが入っているならば、
match="abc[@attr=$n]"
ちなみに、parameterには有効範囲があるので、以下のようにxsl:stylesheetの子要素としてxsl:paramを置く必要があります。
<xsl:stylesheet ... >
<xsl:param name="n" select="test"/>
<xsl:template ... > ... </xsl:template>
...
</xsl:stylesheet>
質問の意味を勘違いしてたらすみません。(その場合は、もう少し丁寧に説明していただかないと、皆さん答えにくいと思います)
ありがとうございます。
説明が不十分であった点、お詫びいたします。
申し訳ありませんでした。
どこか、これは解決できない問題ではないかと考えていた部分があり、あのような質問になってしまいました。
あらためて質問させてください。
質問の要点としては、下記のように書いた場合、param"n"の値をそれぞれのtemplateが認識するかどうか、あるいはどのようにすれば認識するかという点でした。
<xsl:stylesheet ... >
<xsl:param name="n" select="test"/>
<xsl:template ... > ... </xsl:template>
...
</xsl:stylesheet>
例えば、属性にたいしてではありませんが、
下記のようなtemplateを用いた場合、希望通りの結果を得ることができるが、上記のようにparamの宣言をtemplate外で行った場合、宣言は認識されているようでエラーにはならないが、値が認識されず結果を得ることができません。
<xsl:template match="item">
<xsl:param name="n" select="test"/>
<xsl:value-of select="$n"/>
</xsl:template>
同様に、下記のようにtemplate外で宣言されたparamを使用した場合、確かにエラーにはならないのですが、やはり結果を得ることができません。この場合、template内でparamを定義することは、親子関係の上からもできないため、これは解決不可能な問題なのかもしれないと考えました。
<xsl:template match="abc[@attr=$n]"/>
とはいえ、template外の定義がなければ、不明なparamの使用によるエラーになるのですから、値をtemplateに認識させることもできるはずですよね。あるいは別のtemplateが値を隠すというようなことでもあるのでしょうか?
どうかご教示おねがいします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTMLの・要素・属性・属性値 はプログラム言語の「変数」みたいに変更できますか? 5 2022/10/04 05:27
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- DIY・エクステリア 外壁の磁気タイルの穴あけ。下穴は必要でしょうか 4 2022/07/15 11:35
- 数学 空集合 2 2022/07/16 19:08
- 韓国語 空集合 1 2022/07/16 19:04
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スタイルシートについて
-
うまく表示されない
-
東芝のDynabookなのですがアン...
-
昔Winnyってありましたけど、あ...
-
Dreamweaver CS3 : シングルク...
-
XSLT 文字列を指定した回数分...
-
終了タグが認識されない?
-
4色定理はなぜグラフ理論で証...
-
エラーがでます。
-
ビデオハードウェアエラー Live...
-
線形リストに挿入するプログラム
-
DTDファイルをクラスパスから読...
-
VBでXMLファイルを作ると xmlns...
-
XSLTでの正規表現判定
-
c言語 ノードの連結
-
C言語 TreeViewのノードをプロ...
-
2分探索木の高さを求めるプロ...
-
リンクを使って複数ページへCSS...
-
Dropboxの更新がiPhoneで通知さ...
-
XMLで要素が記述された順番に意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLのHTMLへの変換 (初心者)
-
XSLで、XMLの空タグを制御したい。
-
タグの有無の判定
-
htmlに変換されない
-
スタイルシートを使用したXM...
-
xslでの最小値、最大値の取得
-
XSL内でJavaScriptを記述し、Ja...
-
ノードの並び替え
-
VBAからxml・スタイルシートを...
-
XMLをXSLを使いHTMLに変換した...
-
xmlのテキストにリンクを張りた...
-
重複するものを消したい
-
<xsl:key>とtopreceding-siblin...
-
XSL中の改行、タブを無効にした...
-
スタイルシートについて
-
XSLTにてタグ名を取得する方法
-
XSLTで直下のテキストのみ取得...
-
xsl:variable の使用方法
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
おすすめ情報