This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
AW: Selection of every second node
- To: "'Jeni Tennison'" <mail at jenitennison dot com>
- Subject: AW: [xsl] Selection of every second node
- From: Conny Kreyßel <Conny dot Kreyssel at INTER-FORUM dot DE>
- Date: Tue, 21 Aug 2001 15:41:14 +0200
- Cc: xsl-list at lists dot mulberrytech dot com
- Reply-To: xsl-list at lists dot mulberrytech dot com
Year this works, thanks.
But now I have another question.
I would now apply a attribute (type="disc") in the "childs" template (<li>)
if the on every second parent entry (<node>) like this:
<root>
<node>
<another>1</another>
<another>1</another>
<another>1</another>
</node>
<node>
<another>2</another>
<another>2</another>
<another>2</another>
</node>
<node>
<another>3</another>
<another>3</another>
<another>3</another>
</node>
<node>
<another>4</another>
<another>4</another>
<another>4</another>
</node>
</root>
<xsl:template match="node">
<ul>
<xsl:apply-templates select="another" />
</ul>
</xsl:template>
<xsl:template match="another">
<li>
<xsl:if test="boolean(parent::node()[(position() mod 2) =
0])">
<xsl:attribute name="type">disc</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</li>
</xsl:template>
The Result should be:
<ul>
<li>1</li>
<li>1</li>
<li>1</li>
</ul>
<ul>
<li type="disc">2</li>
<li type="disc">2</li>
<li type="disc">2</li>
</ul>
<ul>
<li>3</li>
<li>3</li>
<li>3</li>
</ul>
<ul>
<li type="disc">4</li>
<li type="disc">4</li>
<li type="disc">4</li>
</ul>
Can you help me. My template doesnt work - I dont know why?
Thank you
COnny
> -----Ursprüngliche Nachricht-----
> Von: Jeni Tennison [mailto:mail@jenitennison.com]
> Gesendet: Dienstag, 21. August 2001 14:03
> An: Conny Kreyßel
> Cc: xsl-list@lists.mulberrytech.com
> Betreff: Re: [xsl] Selection of every second node
>
>
> Hi Conny,
>
> > I hope you can help me. How can I make a template that match with
> > every second node?
>
> You need to test the position() of the node element amongst the other
> node elements in its parent root element. Fortunately, this is what
> the match pattern does by default. You can look at the position() mod
> 2 to find the even node elements - if it equals 0 then the node
> element is an even node. So try:
>
> <xsl:template match="node[(position() mod 2) = 0]">
> ...
> </xsl:template>
>
> or:
>
> <xsl:template match="node[not(position() mod 2)]">
> ...
> </xsl:template>
>
> Alternatively, you could have a template that matched all node
> elements, but only apply templates to every second node element, with:
>
> <xsl:apply-templates select="node[not(position() mod 2)]" />
>
> Cheers,
>
> Jeni
>
> ---
> Jeni Tennison
> http://www.jenitennison.com/
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list