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 |