This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

AW: Selection of every second node


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]