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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
■XSLT■固定文字を使ったループ...
-
XMLのHTMLへの変換 (初心者)
-
xmlのテキストにリンクを張りた...
-
XMLから指定テキストのみを抜き...
-
VBAからxml・スタイルシートを...
-
CPUの考え方を教えてください ...
-
TreeViewで複数ノードの選択は...
-
動的な構造体配列の初期化
-
DelphiのTreeViewでの+ボタン...
-
Access VBAでXMLが読み込めない
-
双方向リストの関数
-
xhtml2.0をhtmlに変換したい
-
外部サブセットについて
-
東芝のDynabookなのですがアン...
-
SNMP リンクダウンとノードダ...
-
XMLからデータを取得
-
simplexml_load_fileでのXML
-
XSLT 文字列を指定した回数分...
-
C#でtreeviewの指定ノードを選...
-
二分木の高さについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
xmlのテキストにリンクを張りた...
-
XSLTで固定長データファイルを...
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
XMLのHTMLへの変換 (初心者)
-
xmlの複数条件で検索
-
XSLでXMLデータをタブ区切りデ...
-
スタイルシートを使用したXM...
-
XSL内でJavaScriptを記述し、Ja...
-
XSL中の改行、タブを無効にした...
-
XSLTにてタグ名を取得する方法
-
XML/XSLについて質問です
-
重複するものを消したい
-
xmlの属性が重複しているのをx...
-
XMLの名前空間をXSLから指定す...
-
XSLで特定のタグだけを出力する...
-
XSLTを使用したXML->XML変換で...
-
うまく表示されない
-
XMLから指定テキストのみを抜き...
-
XMLをXSLTやCSSに変換してHTML...
おすすめ情報