[xsl] XSLT Grouping/Filtering issue with preceding/following axes

Subject: [xsl] XSLT Grouping/Filtering issue with preceding/following axes
From: Jacquo Johnson <genxgeek@xxxxxxxxx>
Date: Fri, 5 Aug 2005 08:51:16 -0600
Hi,

I am very new to XSLT and need some enlightenment per the following
issue grouping filtering issue.

Any information (I'm sure this is FAQ'd somewhere) would be greatly
appreciated.

Thank you.

Description:

I am having the following problem when grouping/filtering as such in
that some nodes are getting filtered out/grouped  correctly while others do
not
based on position when using either preceding or following.

XSL:

...
 <xsl:template match="/">

   <!-- This doesn't work...group is not filtered correctly -->
   <xsl:variable name="uh" select="//Record[CodeId='FRED']"/>
   <xsl:element name="Copy">
       <xsl:copy-of select="$uh"/>
    </xsl:element>
    <xsl:element name="Filter">
       <xsl:copy-of
select="$uh[(not(AttributeName=preceding::*/AttributeName)]"/>
    </xsl:element>

    <!-- This works but I'm sure is not the best way to do this... -->
   <xsl:variable name="uh" select="//Record[CodeId='FRED']"/>
   <xsl:element name="Copy">
       <xsl:copy-of select="$uh"/>
    </xsl:element>
    <xsl:element name="Filter">
       <xsl:copy-of
select="$uh[(not(AttributeName=preceding::*/AttributeName) and
           position()=1) or
(not(AttributeName=following::*/AttributeName))]"/>
    </xsl:element>
 </xsl:template>

</xsl:stylesheet>


XML:

<Results>
               <Record>
                       <CodeId>FRED</CodeId>
                       <AttributeName>LT</AttributeName>
                       <OID>647f802e5f8675a6</OID>
                       <Id>AU  100-1</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>FRED</CodeId>
                       <AttributeName>CPQ</AttributeName>
                       <OID>647f802e5f8675a6</OID>
                       <Id>AU  100-2</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>30DAYPM</CodeId>
                       <AttributeName>LT</AttributeName>
                       <OID>daa575325f8675a6</OID>
                       <Id>AU  100-3</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>30DAYPM</CodeId>
                       <AttributeName>CSW</AttributeName>
                       <OID>daa575325f8675a6</OID>
                       <Id>AU  100-4</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>FRED</CodeId>
                       <AttributeName>LT</AttributeName>
                       <OID>647f802e5f8675a6</OID>
                       <Id>AU  100-5</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>FRED</CodeId>
                       <AttributeName>CPQ</AttributeName>
                       <OID>647f802e5f8675a6</OID>
                       <Id>AU  100-6</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>30DAYPM</CodeId>
                       <AttributeName>LT</AttributeName>
                       <OID>daa575325f8675a6</OID>
                       <Id>AU  100-7</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
               <Record>
                       <CodeId>30DAYPM</CodeId>
                       <AttributeName>CCSW</AttributeName>
                       <OID>daa575325f8675a6</OID>
                       <Id>AU  100-8</Id>
                       <AttributeValue>YES</AttributeValue>
               </Record>
</Results>

Current Thread