- - PR -
xsl:ifでの判断の仕方
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-05-11 21:04
お世話になります。
以下のとき、DATA1とDATA2の値を比較し 一致するときにOKと表示するにはどのように書けばいいのでしょうか? DATA1の値の比較(<xsl:if test = "DATA/DATA1[. = 123456]">など)ならいろいろ載っているのですが、このような場合の比較の仕方がわかりませんでした。 以下サンプルです。 XML文書 <?xml version="1.0" encoding="Shift_JIS" ?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <DATA> <DATA1>123456</DATA1> <DATA2>123456</DATA2> </DATA> スタイルシートtest.xsl <?xml version='1.0' encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:if test = "??????"> OK </xsl:if> </xsl:template> </xsl:stylesheet> 環境はMSXML2.0で行いたいです。 以上 宜しくお願い致します。 |
|
投稿日時: 2004-05-11 23:40
仕様を味わいましょう。
比較するオブジェクトが両方ともノード集合の場合は、 1番目のノード集合内のノードと 2番目のノード集合内のノードの 文字列値を比較して、 結果が真になるようなノードが両方のノード集合内にある場合のみ、 比較結果は真になる。 DATA/DATA1 DATA/DATA2 |
|
投稿日時: 2004-05-12 14:16
杉本と申します。
深く考えずに、 <xsl:if test="DATA/DATA1=DATA/DATA2"> では駄目でしたっけ? |
|
投稿日時: 2004-05-12 14:54
MMXさん、sugiさん回答ありがとうございます。
<xsl:if test="DATA/DATA1=DATA/DATA2"> で実行すると以下のようなエラーとなってしまうもので。 =の指定をどう書けばいいのかわからないです。 XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 必要なトークン 'eof' が '=' を検出しました。 DATA/DATA1-->=<--DATA/DATA2 |
|
投稿日時: 2004-05-12 15:17
杉本です。
駄目でしたか・・・ こちらのXSLTプロセッサ動作環境の xalan-2.4.1 では うまくいったのですが。 今、IE6(WindowsXP)で試してみましたが、うまくいきました。 可能ならば、msxml4 あたりにすると、うまくいきそうです。 でも、何で msxml2 は駄目なんでしょう?? 僕も正しい書き方に自身がありませんので、 正しい書き方があるのかも!? |
|
投稿日時: 2004-05-12 16:02
MSXML 2.x 系にXSLのまともな動作を期待しない方がいいですよ。
名前空間(http://www.w3.org/TR/WD-xsl)が示すように、XSLのワーキングドラフト(+MS独自拡張)に準拠するように作られているのですが、これは現在勧告となっているXSLTとはかなりの相違が有ります。 http://www.vbxml.com/xsl/XSLTRef.asp を見ると、2.xではかなりの機能が未実装である事もわかります。 MSXML3.0以降(IE6.0以降)ならそれほど問題は無いと思いますが… で、、本題のMSXML2.0での方法ですが、わかりません(^^; 申し訳ない。 ですが、上記のような事も有るので、できればMSXML又はIEのバージョンアップをしてもらいたい所ですね。 |
|
投稿日時: 2004-05-12 16:29
<xsl:if test = "DATA/DATA1[. = 123456]">
が可能なら = の前後に空白とか <xsl:if test = "DATA/DATA1[. = DATA/DATA2]"> の形が考えられます。 (プログラムというより運だめし) こんなので、根性を鍛えるより、.NET を勉強したほうが 身になるかも。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-05-12 16:32 ] |
|
投稿日時: 2004-05-12 17:14
みなさんありがとうございます。
>今、IE6(WindowsXP)で試してみましたが、うまくいきました。 >可能ならば、msxml4 あたりにすると、うまくいきそうです。 >MSXML3.0以降(IE6.0以降)ならそれほど問題は無いと思いますが… IE6以降なら大丈夫ですか〜。やはりMSXML2.0が悪いのかな。 <xsl:if test = "DATA/DATA1[. = DATA/DATA2]"> で試してみましたところエラーにはならないのですが、 「OK」が表示されませんでした。一致したと判断されなかったらしいです。 msxml2.0だとこういう判断はするなということなのでしょうか・・・ 知識として知りたかったので、書き込みして下さった方ありがとうございます。 |