XSLT 1.0 Group By

后端 未结 2 852
灰色年华
灰色年华 2020-11-28 14:30

I have the following XML data:



    
        JOHN&l         


        
相关标签:
2条回答
  • 2020-11-28 15:12

    Muenchian grouping is the best approach; something like:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    
      <xsl:output method="xml" indent="yes"/>      
      <xsl:key name="groups" match="/results/result" use="Store" />
    
      <xsl:template match="/results">
        <xsl:apply-templates select="result[generate-id() = generate-id(key('groups', Store)[1])]"/>
      </xsl:template>
      <xsl:template match="result">
        <h1><xsl:value-of select="Store"/></h1>
        <table id="{Store}">
          <tr class="heading">
            <th scope="col">Member Id</th>
            <th scope="col">First Name</th>
            <th scope="col">Last Name</th>
          </tr>
          <xsl:for-each select="key('groups', Store)">
            <tr>
              <td><xsl:value-of select="MemberLogin"/></td>
              <td><xsl:value-of select="MemberFirstName"/></td>
              <td><xsl:value-of select="MemberLastName"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </xsl:template>
    </xsl:stylesheet>
    
    0 讨论(0)
  • 2020-11-28 15:18

    maybe easier to understand

       <?xml version="1.0" encoding="utf-8"?>
       <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   >
    
         <xsl:output method="xml" indent="yes"/>      
    
         <xsl:template match="/results">
           <xsl:apply-templates select="result[not(preceding-sibling::result/Store = Store)]/Store" />
         </xsl:template>
    
         <xsl:template match="result" >
           <tr>
             <td>
               <xsl:value-of select="MemberLogin"/>
             </td>
             <td>
               <xsl:value-of select="MemberFirstName"/>
             </td>
             <td>
               <xsl:value-of select="MemberLastName"/>
             </td>
           </tr>
         </xsl:template>
    
         <xsl:template match="Store" >
           <table id="{.}">
             <tr class="heading">
               <th scope="col">Member Id</th>
               <th scope="col">First Name</th>
               <th scope="col">Last Name</th>
             </tr>
             <xsl:variable name="temp" select="." />
             <xsl:apply-templates select="//result[Store = current()]" />
           </table>
         </xsl:template>
    
       </xsl:stylesheet>
    
    0 讨论(0)
提交回复
热议问题