2009-12-14 16 views
6

मैं निम्नलिखित XML डेटा है:XSLT 1.0 समूह के आधार पर

<?xml version="1.0" encoding="iso-8859-1"?> 
<results> 
    <result> 
     <MemberFirstName>JOHN</MemberFirstName> 
     <MemberLastName>DOE</MemberLastName> 
     <MemberLogin>1</MemberLogin> 
     <Store>0180</Store> 
    </result> 
    <result> 
     <MemberFirstName>JANE</MemberFirstName> 
     <MemberLastName>DOE</MemberLastName> 
     <MemberLogin>2</MemberLogin> 
     <Store>0180</Store> 
    </result> 
    <result> 
     <MemberFirstName>ALAN</MemberFirstName> 
     <MemberLastName>SMITH</MemberLastName> 
     <MemberLogin>3</MemberLogin> 
     <Store>0181</Store> 
    </result> 
    <result> 
     <MemberFirstName>DAVID</MemberFirstName> 
     <MemberLastName>GREEN</MemberLastName> 
     <MemberLogin>4</MemberLogin> 
     <Store>0183</Store> 
    </result> 
</results> 

XSLT 1.0 में, मैं द्वारा समूहीकृत करना चाहते हैं और प्रत्येक दुकान में कर्मचारियों के लिए एक तालिका बनाने के। तो उपर्युक्त डेटा में, 3 टेबल बनाए जाएंगे। पहले 2 रिकॉर्ड (स्टोर 180), आदि के लिए दो पंक्तियों वाला एक टेबल ..

मैं XSLT 1.0 में यह कैसे कर सकता हूं?

<table id="table"> 
    <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="results/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:for-each> 
</table> 
+0

[समान सवाल और जवाब देखें] (http://stackoverflow.com/q/18311162/287948)। –

उत्तर

14

Muenchian grouping सबसे अच्छा तरीका है, की तरह कुछ:

<?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> 
+1

muench जादू शब्द है :) – annakata

+0

धन्यवाद मार्क :-) – Neil

+0

मुझे बच्चे नोड के आधार पर समूह करने की आवश्यकता है, तो क्या यह काम करेगा? क्या आप मेरे एक्सएमएल के अनुसार नमूना प्रदान कर सकते हैं? – jvm

1

शायद समझने में अधिक आसान

<?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> 
संबंधित मुद्दे