Subject: RE: 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: 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>
|