Subject: Re: [xsl] Displaying column headers only if variable changes From: "Joerg Heinicke" <joerg.heinicke@xxxxxx> Date: Tue, 12 Feb 2002 01:26:26 +0100 |
Hi Brian, you have the "general" and well-known variable problem: You can not reassign the value of a variable. So your way is not possible. Even the preceding-sibling-axis can not be used, because you sort the values. So you have to use the "easiest" method ;-) 'Muenchian Method': You have to add a key to your stylesheet: <xsl:key name="elements" match="element" use="type"/> Later your for-each: <xsl:for-each select="element[count( . | key('elements', type)[1] ) = 1]"> Now you have selected all unique types: <xsl:value-of select="type"/> Now you can select all elements with this type: <xsl:for-each select="key('elements', type)"> <xsl:value-of select="Foundation.Core.ModelElement.name"/> </xsl:for-each> </xsl:for-each> Change 'element' to the name of the element you need. For more information on Grouping with Muenchian Method: http://www.jenitennison.com/xslt/grouping/muenchian.xml Regards, Joerg ----- Original Message ----- From: "Brian Burridge" <brian_burridge@xxxxxxxxxxxxx> To: <XSL-List@xxxxxxxxxxxxxxxxxxxxxx> Sent: Monday, February 11, 2002 7:05 PM Subject: [xsl] Displaying column headers only if variable changes > > I have an xml list of diagrams. Each diagram has a type. I am sorting on that type with, > > <xsl:sort data-type="text" order="descending" case-order="upper-first" select="type"/> > <xsl:sort data-type="text" order="ascending" case-order="upper-first" select="Foundation.Core.ModelElement.name"/> > > This works fine. What I need to do now, however, is every time the type changes, print the type name. This would result in something like this: > > Activity > diagram 1 > diagram 2 > > Use Case > diagram 1 > diagram 2 > > Sequence > diagram 1 > diagram 2 > diagram 3 > > I set up a global variable called lastDiagramType, using this code: > <xsl:variable name="lastDiagramType">LAST</xsl:variable> > > And I'm checking it like this as I loop through in my for-each: > <xsl:if test="type != $lastDiagramType"> > <b><xsl:value-of select="type"/></b><br/> > <xsl:variable name="lastDiagramType"><xsl:value-of select="type"/></xsl:variable> > <b><xsl:value-of select="lastDiagramType"/></b><br/> > </xsl:if> > > Problem is, it doesn't set the "lastDiagramType" variable to the new type. As you see in the code, right now I'm printing what lastDiagramType is changed to, for debug purposes, and it never changes. It stays "LAST" as I default set it, but it is hitting that code. > > Any ideas? > > Brian N. Burridge > Sr. Internet Developer Analyst > The Internet Group @ Cox Target Media XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Displaying column headers, Dennis Daniels | Thread | RE: [xsl] Displaying column headers, Brian Burridge |
Re: [xsl] Many sets of eyes ..., Thomas B. Passin | Date | Re: [xsl] XSLT Whitespace ???, Joerg Heinicke |
Month |