|
Subject: Re: [xsl] Using xsl:iterate to get a count From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 1 Jul 2026 19:24:05 -0000 |
Thank you David! Much easier than my approach p . From: David Carlisle d.p.carlisle@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Wednesday, July 1, 2026 3:11 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Using xsl:iterate to get a count If I understand the requirement I think you just want <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="chapter"> <xsl:text> Number of gaps =</xsl:text> <xsl:value-of select="count(bookmark[ preceding-sibling::bookmark and number(substring-after(@number,'-')) != (1+number(substring-after(preceding-sibling::bookmark[1]/@number,'-'))) ])"/> </xsl:template> </xsl:stylesheet> which makes Number of gaps =3 David On Wed, 1 Jul 2026 at 19:29, rick@xxxxxxxxxxxxxx <mailto:rick@xxxxxxxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> > wrote: Hi All, I am have a series of bookmark elements and I am trying to find the absolute number of gaps between the @number elements. In my example, there are 3 gaps: between 21-2 and 21-5; between 21-7 and 21-11; and between 21-11 and 21-15. I set up a named template and am expecting an integer of 3, but instead I am getting 011. I am missing something fundamental. Any help would be appreciated. Thank you. Rick Quatro <?xml version="1.0" encoding="UTF-8"?> <map> <chapter name="Chapter21TOC.fm" number="21" page="1523"> <title>Chapter 21 Common Procedural Language and Notice of Court Proceeding</title> <bookmark name="Form21-1.fm" type="form" number="21-1" page="1525"> <title>Form 21-1 Notice of Hearing</title> </bookmark> <bookmark name="Form21-2.fm" type="form" number="21-2" page="1528"> <title>Form 21-2 Notice of Hearing</title> </bookmark> <bookmark name="Form21-5.fm" type="form" number="21-5" page="1531"> <title>Form 21-5 Objection to Notice of Hearing</title> </bookmark> <bookmark name="Form21-6.fm" type="form" number="21-6" page="1535"> <title>Form 21-6 Order on Objection to Notice of Hearing</title> </bookmark> <bookmark name="Form21-7.fm" type="form" number="21-7" page="1537"> <title>Form 21-7 Objection to Notice of Trial</title> </bookmark> <bookmark name="Form21-11.fm" type="form" number="21-11" page="1541"> <title>Form 21-11 Certificate of Service</title> </bookmark> <bookmark name="Form21-15.fm" type="form" number="21-15" page="1542"> <title>Form 21-15 Suggested Language for Appearances before the Court</title> </bookmark> </chapter> </map> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="3.0" expand-text="yes"> <xsl:output method="text" indent="no"/> <xsl:template match="/map"> <xsl:apply-templates/> </xsl:template> <xsl:template match="chapter"> <xsl:variable name="reserved-count"> <xsl:choose> <xsl:when test="exists(bookmark[@type='form'])"> <xsl:call-template name="get-reserved-count"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:text>{@name} {$reserved-count}</xsl:text> </xsl:template> <xsl:template name="get-reserved-count"> <xsl:sequence><xsl:iterate select="bookmark[@type = 'form']"> <xsl:param name="reserved-count" select="0" as="xs:integer"/> <xsl:if test="preceding-sibling::bookmark[1][@type = 'form']"> <xsl:variable name="prev-form-num" select="tokenize(preceding-sibling::bookmark[1]/@number,'\-')"/> <xsl:variable name="curr-form-num" select="tokenize(@number,'\-')"/> <xsl:variable name="gap" select="(number($curr-form-num[2]) - number($prev-form-num[2]))"/> <xsl:choose> <xsl:when test="$gap > 1"> <xsl:next-iteration> <xsl:with-param name="reserved-count" select="$reserved-count + 1" as="xs:integer"/> </xsl:next-iteration> </xsl:when> <xsl:when test=".[last()]">{$reserved-count}</xsl:when> <xsl:otherwise> <xsl:next-iteration> <xsl:with-param name="reserved-count" select="$reserved-count" as="xs:integer"/> </xsl:next-iteration> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:iterate></xsl:sequence> </xsl:template> <xsl:mode on-no-match="shallow-skip"/> </xsl:stylesheet> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2739265> (by email) XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/612310> (by email <> )
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Using xsl:iterate to get , David Carlisle d.p.c | Thread | Re: [xsl] Using xsl:iterate to get , Rolf Ade rolf@xxxxxx |
| Re: [xsl] Using xsl:iterate to get , David Carlisle d.p.c | Date | Re: [xsl] Using xsl:iterate to get , Rolf Ade rolf@xxxxxx |
| Month |