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"/>)  > > <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 -> |
---|---|---|
RE: [xsl] node positioning problem, Michael Kay | Thread | [xsl] convert following-sibling to , 04083259 |
RE: [xsl] Using Javascript to pass , Maria Amuchastegui | Date | Re: [xsl] Testing 2 XML documents f, David Carlisle |
Month |