Announcement

Collapse
No announcement yet.

3 Level Gruppierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 3 Level Gruppierung

    Hallo,

    ich bräuchte eine 3 Level Gruppierung in XSLT 1.0, ich hab diese auch schon hinbekommen nur irgendwie scheint immer das erste Attribut falsch angezeigt zu werden...

    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" version="1.0" exclude-result-prefixes="xsl ddwrt msxsl" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://exslt.org/strings" extension-element-prefixes="date str">
        <xsl:output method="html" indent="no"/>
      	   
    	<xsl:key name="title" match="z:row" use="@ows_Title" />
    	<xsl:key name="group" match="z:row" use="@ows_Group" />
    
        <xsl:template match="/">
        	
        	<xsl:variable name="allgroups">
        		<xsl:for-each select=".//rs:data/z:row[count(. | key('group', @ows_Group)[1]) = 1]">
        			<xsl:sort select="@ows_Group" />
        			<xsl:value-of select="@ows_Group"></xsl:value-of>
    			</xsl:for-each>
        	</xsl:variable>  	
        		
        	
        	<xsl:for-each select=".//rs:data/z:row[count(. | key('title', @ows_Title)[1]) = 1]">
        		<xsl:sort select="@ows_Group"></xsl:sort>
    			<xsl:sort select="@ows_Title" />
    			<xsl:variable name="string1" select="substring-after($allgroups, @ows_Group)"></xsl:variable>
    			<xsl:variable name="string2" select="substring-before($allgroups, @ows_Group)"></xsl:variable>
    			<xsl:if test="string-length($string1)>1 or string-length($string2)>1">
    				<xsl:variable name="last" select="@ows_Group"/>
    				<xsl:if test="not(preceding-sibling::z:row[@ows_Group=$last])">
    					<b><xsl:value-of select="@ows_Group" /></b><br></br>
    				</xsl:if>
    				<xsl:value-of select="@ows_Title" />,
    				<xsl:for-each select="key('title', @ows_Title)">
    					<xsl:sort select="@ows_Language" />
    					<xsl:value-of select="@ows_Language" /> ()
    				</xsl:for-each>
    				<br></br>
    			</xsl:if>
    		</xsl:for-each>
    
    
        </xsl:template>
    </xsl:stylesheet>
    Zuletzt editiert von chris.ba; 19.06.2008, 16:42.

  • #2
    Ich hab nun den Anfangsfehler ausbessern können allerdings gefällt mir die Lösung nicht gerade gut, vielleicht kennt jemand dafür einen besseren weg der nicht über number() geht?

    Code:
    <xsl:stylesheet xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" version="1.0" exclude-result-prefixes="xsl ddwrt msxsl" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://exslt.org/strings" extension-element-prefixes="date str">
        <xsl:output method="html" indent="no"/>
      	   
    	<xsl:key name="title" match="z:row" use="@ows_Title" />
    	<xsl:key name="group" match="z:row" use="@ows_Group" />
    
        <xsl:template match="/">
        	
        	<xsl:variable name="allgroups">
        		<xsl:for-each select=".//rs:data/z:row[count(. | key('group', @ows_Group)[1]) = 1]">
        			<xsl:sort select="@ows_Group" />
        			<xsl:value-of select="@ows_Group"></xsl:value-of>
    			</xsl:for-each>
        	</xsl:variable>  	
        		
        	
        	<xsl:for-each select=".//rs:data/z:row[count(. | key('title', @ows_Title)[1]) = 1]">
        		<xsl:sort select="@ows_Group"></xsl:sort>
    			<xsl:sort select="@ows_Title" />
    			<xsl:variable name="string1" select="substring-after($allgroups, @ows_Group)"></xsl:variable>
    			<xsl:variable name="string2" select="substring-before($allgroups, @ows_Group)"></xsl:variable>
    			<xsl:if test="string-length($string1)>1 or string-length($string2)>1">
    				<xsl:variable name="last" select="@ows_Group"/>
    				<xsl:if test="not(preceding-sibling::z:row[@ows_Group=$last])">
    					<xsl:if test="not(position() = 2)">
    						<b><xsl:value-of select="@ows_Group" /></b><br></br>
    					</xsl:if>
    				</xsl:if>
    				<xsl:if test="position() =1">
    					<b><xsl:value-of select="@ows_Group" /></b><br></br>
    				</xsl:if>
    				<xsl:value-of select="position()" />,
    				<xsl:value-of select="@ows_Title" />,
    				<xsl:for-each select="key('title', @ows_Title)">
    					<xsl:sort select="@ows_Language" />
    					<xsl:value-of select="@ows_Language" /> ()
    				</xsl:for-each>
    				<br></br>
    			</xsl:if>
    		</xsl:for-each>
    
    
        </xsl:template>
    </xsl:stylesheet>

    Comment

    Working...
    X