RE: [xsl] Following-sibling node test

Subject: RE: [xsl] Following-sibling node test
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 20 Feb 2005 22:28:59 -0000
Most people use (position() = last()) to test for the last item in a list.

The reason your test isn't working is that the last section with a non-empty
HTML element *does* have a following sibling, it just happens to be a
following-sibling that you're not including in your list.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Maria Amuchastegui [mailto:mamuchastegui@xxxxxxxxxxx] 
> Sent: 20 February 2005 20:43
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] Following-sibling node test
> 
> I am trying to output a list of all 'ref' attributes for which the
> corresponding 'HTML' element is empty. For example, given the 
> following xml
> data, I would want to  output ['2','3','4','5']. The final 
> element in the
> list should *not* be followed by a comma. I am tying to use the
> following-sibling node test but it's not working. How can I 
> test for these
> two conditions (HTML element is not empty, and is last item in list)? 
> 
>      <Content>
>           <Section ref="1">
>                <Name/>
>                <HTML/>
>           </Section>
>           <Section ref="2">
>                <Name>Summary</Name>
>                <HTML>This is the Summary section.</HTML>
>           </Section>
>           <Section ref="3">
>                <Name>Details</Name>
>                <HTML>This is the Details section.</HTML>
>           </Section>
>           <Section ref="4">
>                <Name>Contacts</Name>
>                <HTML>This is the Contacts section.</HTML>
>           </Section>
>           <Section ref="5">
>                <Name>Terms</Name>
>                <HTML>This is the Terms section.</HTML>
>           </Section>
>           <Section ref="6">
>                <Name/>
>                <HTML/>
>           </Section>
>      </Content>
> 
>      <xsl:template name="SectionNumbers">
>           <xsl:for-each select="/Content/Section[HTML != '']">
>                <xsl:text>'</xsl:text>
>                <xsl:value-of select="@ref"/>
>                <xsl:choose>
> <xsl:when test="(following-sibling::*) and (HTML != '')">
>                          <xsl:text>',</xsl:text>
>                     </xsl:when>
>                     <xsl:otherwise>
>                          <xsl:text>'</xsl:text>
>                     </xsl:otherwise>
>                </xsl:choose>
>           </xsl:for-each>
>      </xsl:template>

Current Thread