
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xml→htmlへの変換&ページ分割...
-
タグの有無の判定
-
XSL内でJavaScriptを記述し、Ja...
-
XSLで、XMLの空タグを制御したい。
-
同じタグ名の項目取得
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
XMLファイル内のデータ(値)を変...
-
DTDファイルをクラスパスから読...
-
XML、XSLTの適応エラー(IEから...
-
XSLT
-
SNMP リンクダウンとノードダ...
-
MSXMLを使ってノードを削除した...
-
VBA コードを中断するには?
-
XMLファイルの作り方がわかりま...
-
VBでXMLファイルを作ると xmlns...
-
最長経路探索
-
ExcelVBAで書き出した文字が化ける
-
複数のマックPCによる数値計算...
-
制限付きアカウントでxmlを読み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
xmlのテキストにリンクを張りた...
-
XSL中の改行、タブを無効にした...
-
XSLでXMLデータをタブ区切りデ...
-
XSL内でJavaScriptを記述し、Ja...
-
XMLとXSLTでリンクを張る方法
-
空かスペースを認識させること...
-
XSLで、XMLの空タグを制御したい。
-
xmlから吐き出したhtmlデータの...
-
xsl:sortを子要素で
-
自動的にリンクを貼る・・・
-
xmlからの表示
-
2stepをくりかえす方法を教えて...
-
XMLからcsvへの変換
-
タグを置き換える
-
XMLのHTMLへの変換 (初心者)
-
スマートなxsltの記述方法
-
XSLスタイルシートについて
-
XSLTで固定長データファイルを...
-
htmlに変換されない
おすすめ情報