Subject: Re: 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: 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"/>) 
> > <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
|