This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Problem with Predicate selecting only first node rather than all but last
- To: xsl-list at lists dot mulberrytech dot com
- Subject: [xsl] Problem with Predicate selecting only first node rather than all but last
- From: sara dot mitchell at ps dot ge dot com
- Date: Thu, 18 Jan 2001 19:37:34 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
- Sensitivity: Private
I know problems like this have been posted to the list
before, but I can't seem to find the answers in the
archive and I've been looking at this code too long.
Hopefully, someone else will be able to point out
the almost-surely obvious error in my code.
In the following code, the variable $idx contains nodes that
have been sorted to be used in generating an index. The
variable $primes contains the unique index entries.
Everything works correctly with one exception. If an indexentry
has 3 or more nodes in $idx, this code generates a link for
the first node and for the second node, but not for the third, or
later nodes.
<xsl:variable name="entries" select="$idx//indexentry"/>
<xsl:variable name="primes"
select="$entries/idx1[not(./text()=following::idx1/text())]"/>
<xsl:for-each select="$primes">
<xsl:variable name="thisprime" select="./text()"/>
<xsl:variable name="dupsall"
select="$entries[idx1[(./text()=$thisprime)]]"/>
<xsl:variable name="dups"
select="$dupsall[not(position()=count($dupsall))]/idx1"/>
<!-- dups: <xsl:value-of select="count($dups)"/> -->
<xsl:call-template name="doprimes">
<xsl:with-param name="primedups" select="$dups"/>
<xsl:with-param name="second" select="$dupsall"/>
</xsl:call-template>
</xsl:for-each>
To test this, I put in the line that is currently commented out
because I suspected that the select value for the variable $dups
was only selecting the first duplicate, not all duplicates (except
the last) which is what I want. I was right, the count for $dups
is always 2 even if there are 3 or more present.
I can't figure out how to change the predicate to select all the
duplicate nodes except for the last one. Even more confusing,
when I uncomment the test line with $dups count, I actually get
the correct output, all of the duplicates are found and generate
separate links even though the count for $dups still says 2.
Thanks,
Sara Mitchell
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list