xslt实现select distinct [Permalink]
Thu Nov 25 11:51:55 CST 2004
今天做显示支持的手机列表时候遇到一个技术问题,就是select distinct。目前状况是,一次选出所有的equipment纪录,每条记录带有自己的brand(品牌)信息。选出纪录可能是这样格式:
<ROW> <ID>1</ID> <BRAND>NOKIA</BRAND> <MODEL>6100</MODEL> </ROW> <ROW> <ID>2</ID> <BRAND>NOKIA</BRAND> <MODEL>7250</MODEL> </ROW> <ROW> <ID>3</ID> <BRAND>NOKIA</BRAND> <MODEL>8210</MODEL> </ROW> <ROW> <ID>4</ID> <BRAND>MOTO</BRAND> <MODEL>E365</MODEL> </ROW> <ROW> <ID>5</ID> <BRAND>NOKIA</BRAND> <MODEL>V3</MODEL> </ROW> ...这样的数据,我们需要组织成:
<?xml version="1.0" encoding="gb2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="wml" omit-xml-declaration="no" indent="no" doctype-public="-//WAPFORUM//DTD WML 1.1//EN" doctype-system="http://www.wapforum.org/DTD/wml_1.1.xml" /> <xsl:include href="../common/common.func.xsl"/> <xsl:include href="../common/header.inc.xsl"/> <xsl:include href="../common/footer.inc.xsl"/> <xsl:variable name="pn" select="/ROOT/EXTINFO/PAGENO"/> <xsl:template match="/"> <wml> <card> <xsl:call-template name="inc.header"/> <p> <xsl:for-each select="/ROOT/DATA/ROW"> <xsl:variable name="thisEm" select="EM_ID"/> <xsl:if test="count(preceding-sibling::ROW)=0"> <a> <xsl:attribute name="href">#<xsl:value-of select="EM_ID"/></xsl:attribute> <xsl:value-of select="BRAND"/></a><br/> </xsl:if> <xsl:if test="preceding-sibling::ROW[1]/EM_ID != $thisEm"> <a> <xsl:attribute name="href">#<xsl:value-of select="EM_ID"/></xsl:attribute> <xsl:value-of select="BRAND"/></a><br/> </xsl:if> </xsl:for-each> </p> <xsl:call-template name="inc.footer"/> </card> <xsl:for-each select="/ROOT/DATA/ROW"> <xsl:variable name="thisEm" select="EM_ID"/> <xsl:if test="count(preceding-sibling::ROW)=0"> <card> <xsl:attribute name="id"><xsl:value-of select="EM_ID"/></xsl:attribute> <xsl:call-template name="inc.header"/> <p align="center">品牌[<xsl:value-of select="BRAND"/>]的支持机型</p> <p> <xsl:for-each select="../ROW[EM_ID=$thisEm]"> 型号:<xsl:value-of select="MODEL"/><br/> 描述:<xsl:value-of select="DESCRIPTION"/><br/> </xsl:for-each> </p> <xsl:call-template name="inc.footer"/> </card> </xsl:if> <xsl:if test="preceding-sibling::ROW[1]/EM_ID != $thisEm"> <card> <xsl:attribute name="id"><xsl:value-of select="EM_ID"/></xsl:attribute> <xsl:call-template name="inc.header"/> <p align="center">品牌[<xsl:value-of select="BRAND"/>]的支持机型</p> <p> <xsl:for-each select="../ROW[EM_ID=$thisEm]"> 型号:<xsl:value-of select="MODEL"/><br/> 描述:<xsl:value-of select="DESCRIPTION"/><br/> </xsl:for-each> </p> <xsl:call-template name="inc.footer"/> </card> </xsl:if> </xsl:for-each> </wml> </xsl:template> </xsl:stylesheet>绕着弯子实现简单功能,是xslt一大特点。 enjoy
Posted by: miles
Comments on this entry