• xslt转换xml常用知识(4)


         这节来谈谈xslt对xml查询分组的问题。平时我们在写sql语句时,经常用到group by ,如果xslt里面也有这样的元素就好了。

    不错,在xslt2.0里面确实有这样的元素了,那就是xsl:for-each-group元素。

    看下例子:

    Code

    xsl:

    Code

    的确有了xsl:for-each-group这个元素,非常方便,不过这是xslt2.0里面的特性。而且非常致命的一点,

    vs2008不支持xslt2.0(查看:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2881720&SiteID=1),

    因此只能用xslt1.0里面的方法了。那么如何做呢?请看下面的例子:

    呈现效果可以在我的文章http://www.cnblogs.com/jackhuclan/archive/2008/08/23/1274058.html中找到,

    xml和xslt样式文件下载:

    https://files.cnblogs.com/jackhuclan/xmlxsl.rar

    根据当时需求,需要根据DescriptionType分组,然后显示在页面右侧,并且左侧显示的右侧不再显示。这个时候考虑算法

    根据DescriptionType分组,然后排除左侧已经显示过的DescriptionType,下载文件里面都有,这里只是对xslt1.0里面

    分组强调一下。

    <xsl:key name="des-search" match="JobDetail//Row" use="DesciptionType"/>

    这一句是列出要分组的字段

    <xsl:for-each select="JobDetail//Row[generate-id()=generate-id(key('des-search',DesciptionType)[1])]">
      
    <xsl:sort select="DesciptionType" data-type="number" order="ascending"/>
      
    <xsl:if test="DesciptionType != $desciptionType">
        
    <xsl:variable name="desciptionType" select="DesciptionType"></xsl:variable>
        
    <xsl:call-template name="jd">
          
    <xsl:with-param name="des1" select="$desciptionType"></xsl:with-param>
          
    <xsl:with-param name="cnode" select="//JobDetail/Row"></xsl:with-param>
        
    </xsl:call-template>
      
    </xsl:if>
    </xsl:for-each>

    这部分是具体的算法,注意一下:

    <xsl:for-each select="JobDetail//Row[generate-id()=generate-id(key('des-search',DesciptionType)[1])]">

    更详细的文章请参考:http://www.oracle.com/technology/global/cn/pub/articles/wang_xslt.html 

  • 相关阅读:
    nuxt实践
    安卓H5软键盘遮挡输入框
    h5复制粘贴板,打开APP功能
    MVC3
    MVC3
    C#高编
    接口的显式实现(转)
    E-Retail 框架学习
    C#高编
    实现DIV居中布局三种途径(转)
  • 原文地址:https://www.cnblogs.com/jackhuclan/p/1283873.html
Copyright © 2020-2023  润新知