• 締切済み

XMLでの表示について

XML初心者です。 XMLに下記のような並びでタグが構成されているときに XSLで上から順に読み込み前回と重複する内容の時は その値を表示しないようにしたいのです。XSLにどう書いて制御すれば よいか途方にくれています。ご存知の方ご教授頂きたく思います。 よろしくお願いします。 XMLでのタグ構成         IE上で表示させたい結果 <a1>001</a1>        001   <a1>002</a1>        002 <a1>002</a1> <a1>002</a1> <a1>001</a1>

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

ソート後の結果セットを変数に入れて、このノードに対して直前値チェックをすると重複が解ります。 ie6とopera9では、重複排除出来ました。 ーーーxslファイルーーーー <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <xsl:variable name="postsort"> <xsl:apply-templates select="//a1"> <xsl:sort order="ascending" select="text()" /> </xsl:apply-templates> </xsl:variable> <xsl:call-template name="ProcessSecondTree"> <xsl:with-param name="tree" select="$postsort"/> </xsl:call-template> </body></html> </xsl:template> <xsl:template name="ProcessSecondTree"> <xsl:param name="tree"/> <xsl:for-each select="$tree/a2" > <xsl:variable name="prepos" select="number(position())-1" /> <!-- 前回値を変数に設定 --> <xsl:variable name="preData"> <xsl:choose> <xsl:when test="position()&gt;1"> <xsl:value-of select="../a2[$prepos]" /> </xsl:when> <xsl:otherwise>000<!-- 何でもok --> </xsl:otherwise> </xsl:choose> </xsl:variable > <xsl:if test="text()!=$preData"><!-- 等しくなければ --> <xsl:value-of select="text()" /><br /> </xsl:if> </xsl:for-each> </xsl:template> <xsl:template match="a1" > <a2><xsl:value-of select="text()" /> </a2> </xsl:template> </xsl:stylesheet>

すると、全ての回答が全文表示されます。

専門家に質問してみよう