|
Subject: RE: [xsl] node positioning problem From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 30 Mar 2005 19:54:31 +0100 |
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"/>) 
> <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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] node positioning problem, Spencer Tickner | Thread | Re: [xsl] node positioning problem, Spencer Tickner |
| [xsl] convert following-sibling to , 04083259 | Date | Re: [xsl] Transformation using Saxo, M. David Peterson |
| Month |