[xsl] Sequence numbering

Subject: [xsl] Sequence numbering
From: Arthur Maloney <ArthurM@xxxxxxxxxx>
Date: Thu, 30 Dec 2004 07:54:10 +0000
Hello xsl-list,

How do I get a numbered sequence for a sorted list excluding a few nodes?
below is the output I'm getting

Note 1: objectId, address,DbAddress  etc are correct as per sort & exclusion.
      (0),(9),(14) etc are as source node list no-sort but excluded
      correct sorted sequence would be 0,1, 2 etc (the excluded sorted order -1).

Note 2: Its for a database - ordinal position is quicker than...["objectId"]


SqlDataReader dr=cmd.ExecuteReader();

while (dr.Read())
{
        if ( ! dr.IsDBNull(0))
        {
                objectId=dr.GetInt32(0);
        }

        if ( ! dr.IsDBNull(9))
        {
                address=dr.GetString(9);
        }

        if ( ! dr.IsDBNull(14))
        {
                DbAddress=dr.GetString(14);
        }

        if ( ! dr.IsDBNull(13))
        {
                DbName=dr.GetString(13);
        }
....

Its a for-each loop and I exclude some nodes with a test

Problem occurs with number at:
                                <xsl:call-template name="columnOrdinal">
                                        <xsl:with-param name="sequence">
                                        <xsl:number  level="any"/>
                                        </xsl:with-param>
                                </xsl:call-template>
Note : columnOrdinal just rebases i.e. number-1 (works fine)



Code Full Listing:

<xsl:for-each select="$table/columns/column"><!--Put primary key col(s) at head of list -->
<xsl:sort select="@inPrimaryKey" order="descending"/>
<xsl:sort select="./colName"/>
<xsl:choose>
 <xsl:when test="./colName= 'rowGUID'"></xsl:when>
 <xsl:when test="./colName= 'auto_rv'" ></xsl:when>
 <xsl:when test="./colName= 'rowCreatedBy'"></xsl:when>
 <xsl:when test="./colName= 'rowCreated'"></xsl:when>
 <xsl:when test="./colName= 'rowModified'"></xsl:when>
 <xsl:when test="./colName= 'rowModifiedBy'"></xsl:when>
 <xsl:otherwise>
        <xsl:variable name="colOrdinal">
                <xsl:call-template name="parenthesize">
                        <xsl:with-param name="value">
                                <xsl:call-template name="columnOrdinal">
                                        <xsl:with-param name="sequence">
                                        <xsl:number  level="any"/>
                                        </xsl:with-param>
                                </xsl:call-template>
                        </xsl:with-param>
                </xsl:call-template>
        </xsl:variable>
 
        <xsl:call-template name="if-stmt">
        <xsl:with-param name="line" select="2"/>
        <xsl:with-param name="tab" select="$tab+2"/>
        <xsl:with-param name="expression">
        <xsl:text> ! dr.IsDBNull</xsl:text>
        <xsl:value-of select="$colOrdinal"/>
        </xsl:with-param>
        <xsl:with-param name="stmt">
                <xsl:choose>
                        <xsl:when test="./@identity='true'">
                        <xsl:text>objectId</xsl:text>
                        </xsl:when>
                        <xsl:otherwise>
                        <xsl:value-of select="./colName"/>
                        </xsl:otherwise>
                </xsl:choose>
                
                <xsl:text>=dr.</xsl:text>
                        
                <xsl:call-template name="replace">
                                <xsl:with-param name="value">
                                <xsl:value-of select="./@NetFrameworkTypedAccessor"/>                           
                                </xsl:with-param>
                                <xsl:with-param name="search-string">
                                <xsl:text>()</xsl:text>
                                </xsl:with-param>
                                <xsl:with-param name="replace-string">
                                        <xsl:value-of select="$colOrdinal"/>
                                </xsl:with-param>
                        </xsl:call-template><!-- end replace -->
                </xsl:with-param>
</xsl:call-template><!-- end if-stmt -->                                                                
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>





-- 
Best regards,
 Arthur                          mailto:ArthurM@xxxxxxxxxx

Current Thread