- - PR -
XSLT:ソート後の内容比較は可能でしょうか?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-06 16:21
はじめまして
いきなりで申し訳ないのですが、質問をさせてください。 <DATA> <ITEM> <X>123</X> <Y>987</Y> </ITEM> <ITEM> <X>123</X> <Y>654</Y> </ITEM> </DATA> ITEMをX,Yの内容でソートし、(123 654, 123 987) ソート後の順序で1つ後ろにあるITEMのX,Yそれぞれの内容を比較し 重複する部分は表示しない、(654, 123 987) という処理をしたいので、X,Yそれぞれで ancestor::DATA/ITEM[paramで渡した親ITEMのposition()+1]/X = node() で比較させたところ、 ソート後のITEMのposition()と、XPath上のITEMのposition()の値が 違うようでうまくいきません。 うまく処理する方法があれば、または「XSLでは無理」であればご教示ください。 [ メッセージ編集済み 編集者: きくらげ 編集日時 2005-01-06 17:51 ] |
|
投稿日時: 2005-01-06 18:02
XPath式で使っている 値をデバッグ出力して確認
-区切り文字-<xsl:copy-of select="ancestor::DATA/ITEM"/>=区切り文字= などなど [ メッセージ編集済み 編集者: MMX 編集日時 2005-01-06 18:42 ] |
|
投稿日時: 2005-01-06 20:50
ご回答ありがとうございます。
比較先の内容を表示してチェックしてみたのですが、以下のようになりました。 XML---- 123 987 123 654 321 741 123 456 ------- ↓ (1) 123 [123] 456 [654] (2) 123 [321] 654 [741] (3) 123 [123] 987 [456] (4) 321 [] 741 [] ITEMでposition()を表示した場合は、ソート順の位置を持っているようですが、 X,Yからancestor::DATA/ITEMで指定するposition()は元の文書上の位置のようです。 今回作成したxml,xslを置いておきます。 興味をお持ちになられた方は一度ご検証いただければと思います。 http://page.freett.com/NNCC/test.xml http://page.freett.com/NNCC/test.xsl |
|
投稿日時: 2005-01-13 09:21
ソート後の順序で1つ後ろにあるITEMとの比較、という事は出来ません。
が、以下の様なテンプレートで希望する処理が出来るかと思います。 <xsl:template match="DATA"> <xsl:for-each select="ITEM[preceding-sibling::ITEM/X != X]"> <xsl:sort select="X" data-type="number"/> <xsl:for-each select="../ITEM[X = current()/X]"> <xsl:sort select="Y" data-type="number"/> <p> <xsl:if test="position() = last()"> <xsl:value-of select="concat(X,' ')"/> </xsl:if> <xsl:value-of select="Y"/> </p> </xsl:for-each> </xsl:for-each> </xsl:template> いかがでしょうか? |
|
投稿日時: 2005-01-31 23:37
BLACK様
ご回答ありがとうございます<(_ _)> >ソート後の順序で1つ後ろにあるITEMとの比較、という事は出来ません。 ということがはっきりした上、サンプルまで頂けて、感謝の言葉もございません。 皆様、本当にありがとうございました。 |
1