RE: [xsl] preceding sibling headaches

Subject: RE: [xsl] preceding sibling headaches
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Tue, 22 Apr 2003 16:08:57 -0400
Your test

<xsl:when test = "preceding-sibling::transition[1]">

gets the first "transition" element that is a preceding-sibling, and
there always is one after the first transition element.  That is why you
got your results.  

What you really want to do is to look at the first preceding sib and see
if it is a "transition" element.  You can do this by checking its name
as follows -

<xsl:template match='paragraph'>
<p>
   <xsl:if test='preceding-sibling::*[1][name()="transition"]'>
      <xsl:attribute name='rend'>transition</xsl:attribute>
   </xsl:if>
   <xsl:value-of select='.'/>
</p>
</xsl:template>

Cheers,

Tom P

[ Paul Tremblay]
> 
> I can't understand how to use preceding sibling, despite the 
> two books I
> have on xslt.
> 
> Here is my original XML file:
> 
> <paragraph>A paragraph</paragraph>
> 
> <transition/>
> 
> <paragraph>A pargraph after a transition</paragraph>
> 
> I want to transform this to:
> 
> <p>A paragraph</p>
> 
> <p rend = "transition">A paragrah after transition</p>
> 
> Here is en excerpt form my unsuccessful code:
> 
> 
>     <xsl:template match = "paragraph">
>         <xsl:choose>
>             <xsl:when test = "preceding-sibling::transition[1]">
>                 <p rend="transition">
>                     <xsl:apply-templates/>
>                 </p>
>             </xsl:when>
>             <xsl:otherwise>
>                 <p>
>                     <xsl:apply-templates/>
>                 </p>
>             </xsl:otherwise>
>         </xsl:choose>
>     </xsl:template>
> 
> This transformation turns *all* paragraphs after a 
> </transtion> into <p
> rend ="transtion">. 
> 

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


Current Thread