xsl-list
[Top] [All Lists]

Re: Count() elements in range

2003-10-20 20:05:34
I realize this is an old thread but I wrote the response when I was rushing around trying to get ready for a vacation. After rereading what I wrote I realized I made a rediculous mistake. To ensure that anybody who reads this in the future doesnt get the wrong information what I should have said was that parentheses are only used when invoking a function OR when grouping your elements. So a statement like (descendant::element)[1] would still be valid of you were looking for the element node in the first postion that was a descendant of the current context node. This clarification becomes more prevalent when using something like preceding::para[1] which returns the 1st para element in reverse document order where as (preceding::para)[1] returns the first para element in regular document order.

Sorry for any confusion I may have caused anyone!!!!! I havent check the posting to see if someone caught this and made the correction. Hopefully they did and this is now a mute point.

Best regards,

M.


From: "M. David Peterson" <conners_dad(_at_)msn(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: Re: [xsl] Count() elements in range
Date: Wed, 15 Oct 2003 21:05:10 -0600

Chris,

At first glance I noticed you have following-sibling wrapped in parentheses.
The only time you will use parentheses is when you are invoking a function.
In this case you are just searching for a particular node using a standard
XPath expression.

So, this...

<xsl:when test="(following-sibling::element[1][child::flag]) or
> (count(following-sibling::element) = 0)">

should read like this...

<xsl:when test="following-sibling::element[1][child::flag] |
count(following-sibling::element) = 0)">

Im rushing out the door and don't have time to look to see what other issues
you might have or what solutions would work best but if I get back and this
hasn't helped or someone else hasn't been able to help I will take another
look at it.

Best regards,

M.


----- Original Message -----
From: <Chris(_dot_)Pearson(_at_)agilisys(_dot_)com>
To: <XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Wednesday, October 15, 2003 6:33 PM
Subject: [xsl] Count() elements in range


> I am wrestling with a problem related to counting a specific range of
> elements in a source document. I've tried searching the archives, but I
> was
> unable to locate any past discussions that appeared relevant.
>
>
> Problem: count the number of <element> nodes in the tree starting from the > last <element> or the last <element> whose following-sibling::element does
> not have a child <flag>. I think my issue is simply a matter of XPath
> expressions, but my brain keeps trying differing versions of recursion
> with
> no luck.
>
>
> Source xml:
> <?xml version="1.0" encoding="UTF-8" ?>
> <root>
> <!--start A series of 1 -->
> <element number="A1">
> <flag/>
> </element>
> <!-- start B series of 4 -->
> <element number="B1">
> <flag/>
> </element>
> <element  number="B2"/>
> <element  number="B3"/>
> <element  number="B4"/>
> <!-- start C series of 2 -->
> <element  number="C1">
> <flag/>
> </element>
> <element  number="C2"/>
> <!-- start D series of 3 -->
> <element  number="D1">
> <flag/>
> </element>
> <element  number="D2" />
> <element  number="D3" />
> </root>
>
>
> Stylesheet so far:
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>   version="1.0">
> <xsl:output method="text" media-type="text/plain"/>
> <xsl:strip-space elements="*" />
>
> <xsl:template match="/root/element">
>   <xsl:choose>
>     <xsl:when test="(following-sibling::element[1][child::flag]) or
> (count(following-sibling::element) = 0)">
>       <xsl:call-template name="countFlags">
>         <xsl:with-param name="nodeList"
> select="preceding-sibling::element"
> />
>       </xsl:call-template>
>     </xsl:when>
>     <xsl:otherwise />
>   </xsl:choose>
> </xsl:template>
>
> <xsl:template name="countFlags">
>   <xsl:param name="nodeList"/>
> <!-- do something here to count the preceding-sibling::element nodes up to
> the first <element> whose following-sibling::element does not have a
> <flag>
> child. -->
> </xsl:template>
> </xsl:stylesheet>
>
>
> Thanks in advance,
>
>
> Chris
>
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


_________________________________________________________________
Get a FREE computer virus scan online from McAfee. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>