|
Subject: Re: [xsl] Using xsl:iterate to get a count From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 1 Jul 2026 19:10:50 -0000 |
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 < 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 <>)
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Using xsl:iterate to get a co, rick@xxxxxxxxxxxxxx | Thread | Re: [xsl] Using xsl:iterate to get , rick@xxxxxxxxxxxxxx |
| [xsl] Using xsl:iterate to get a co, rick@xxxxxxxxxxxxxx | Date | Re: [xsl] Using xsl:iterate to get , rick@xxxxxxxxxxxxxx |
| Month |