[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] node positioning problem


Subject: Re: [xsl] node positioning problem
From: Spencer Tickner <spencertickner@xxxxxxxxx>
Date: Wed, 30 Mar 2005 12:50:46 -0800

Hi Michael,

Thank you very much, solved my problem and gave me some things to think about.

Cheers,

Spence


On Wed, 30 Mar 2005 19:54:31 +0100, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> This
> 
>         <xsl:for-each select="child::BBB">
>             <xsl:if test="position() = 1">
>                 <xsl:copy-of select="BBB"/>
>             </xsl:if>
>         </xsl:for-each>
> 
> could be replaced by
> 
> <xsl:copy-of select="BBB[1]"/>
> 
> In this:
> 
> <xsl:when test="not(count(preceding-sibling::*[name()=name(current())])+1) =
> 1">
> 
> you know that the name of the current element is BBB, so it's the same as
> 
> test="not(count(preceding-sibling::BBB)+1) = 1"
> 
> which probably should be corrected to:
> 
> test="not(count(preceding-sibling::BBB)+1 = 1)"
> 
> or better still
> 
> test="not(preceding-sibling::BBB)"
> 
> XSLT can be verbose, but it doesn't have to be!
> 
> Michael Kay
> http://www.saxonica.com/
> 
> 
> > -----Original Message-----
> > From: Spencer Tickner [mailto:spencertickner@xxxxxxxxx]
> > Sent: 30 March 2005 19:14
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] node positioning problem
> >
> > Hi everyone, thanks for the help and all the great responses I've
> > gleened from ya.
> >
> > Here we go I got an xml file like so
> >
> > <!-- AA2 exists -->
> > <AAA>
> >     <AAA1></AAA1>
> >     <AAA2></AAA2>
> >     <BBB></BBB>
> >     <CCC></CCC>
> >     <BBB></BBB>
> > </AAA>
> > <!-- AA2 does not exist -->
> > <AAA>
> >     <AAA1></AAA1>
> >     <BBB></BBB>
> >     <BBB></BBB>
> >     <CCC></CCC>
> > </AAA>
> >
> > Ok, now in a quick pseudo what I need is
> >
> > <!-- If AA2 does exist -->
> > <h4>AAA1 AAA2</h4>
> > <h6>BBB</h6>
> > <h6>BBB</h6>
> >
> > <!-- If AA2 does not exist -->
> > <h4>AA1 BBB</h4>
> > <h6>BBB</h6>
> >
> > Here are my current templates
> >
> > <!-- This template works fine and dandy -->
> > <xsl:template match="AAA">
> >     <h4>
> >     <xsl:copy-of select="AAA1"/>
> >     <xsl:choose>
> >     <xsl:when test="AAA2"/>
> >         <xsl:copy-of select="AAA2"/>
> >     </xsl:when>
> >     <xsl:otherwise>
> >         <xsl:for-each select="child::BBB">
> >             <xsl:if test="position() = 1">
> >                 <xsl:copy-of select="BBB"/>
> >             </xsl:if>
> >         </xsl:for-each>
> >      </xsl:otherwise>
> >      </xsl:choose>
> >      <h4>
> >      <xsl:apply-templates/>
> > </xsl:template>
> >
> > <!-- This is where I get confused -->
> > <xsl:template match="BBB">
> >         <h6>
> >       <xsl:choose>
> >         <!-- If there is an AAA2 we always put down BBB -->
> >       <xsl:when test="parent::AAA/AAA2">
> >               <xsl:copy-of select="BBB"/>
> >       </xsl:when>
> >
> >        <!-- This doesn't work but it should skip the first BBB and
> > grab the rest -->
> >       <xsl:when
> > test="not(count(preceding-sibling::*[name()=name(current())])+1)
> > = 1">
> >               <p class="sub">(<xsl:copy-of
> > select="subsectionnumber"/>)&#160;
> >               <xsl:copy-of select="subsectiontext"/></p>
> >       </xsl:when>
> >       </xsl:choose>
> >        </h6>
> >       <xsl:apply-templates/>
> > </xsl:template>
> >
> > Ok, I think that about covers it, thanks for any help or
> > advice you can offer
> >
> > Spencer


Current Thread
Keywords