Subject: RE: [xsl] Confounded by grand-parents From: Jon Steeves <Jon_Steeves@xxxxxxxxxxxxxx> Date: Wed, 23 Apr 2003 15:33:08 -0700 |
Thanks Rick. I do need to match on "register". So I borrowed from your method and got something that works. Here's the code I ended up using: <xsl:variable name="block1" select="//block[1]"/> <xsl:template match="register"> <xsl:choose> <!-- if it's the first register in the first block, no page break --> <xsl:when test="generate-id(ancestor::block)=generate-id($block1) and position()=1"> <fo:block id="{generate-id(.)}" font-weight="bold" font-family="Helvetica" font-size="11pt"> Register <xsl:value-of select="reg_address"/>: <xsl:apply-templates select="reg_name"/> </fo:block> </xsl:when> <etc/> Thanks to all for the help. Jon -----Original Message----- From: Rick Taylor [mailto:taylor@xxxxxxxx] Sent: Wednesday, April 23, 2003 2:31 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Confounded by grand-parents Jon, Unless I'm missing something, the sample pattern that Marty sent you appears to satisfy your requirements --except for an oversight that there exists a registers element between block and register. So it should be "blocks/block[1]/registers/register[1]". If for some reason you need to match on 'register' and then check 'backwards' to see if the grandparent is the first 'block' element then this is one way to do it <xsl:variable name="block1" select="//block[1]"/> <xsl:template match="register[1]"> <xsl:if test="generate-id(ancestor::block)=generate-id($block1)"> <firstRegister> <xsl:value-of select="."/> </firstRegister> </xsl:if> </xsl:template> -rick At 01:31 PM 4/23/03 -0700, you wrote: >Unfortunately, I need the template to match on the register and then test >to see if the grandparent is the 1st element of its type. > >Thanks > >Jon > >-----Original Message----- >From: Marty McKeever [mailto:marty.mckeever@xxxxxxxxxx] >Sent: Wednesday, April 23, 2003 12:41 PM >To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx >Subject: RE: [xsl] Confounded by grand-parents > > >you might try > >xsl:template match="blocks/block[1]/register[1]" > >or if you need the xsl:choose sytntax, i'm sure someone will post a fine >example of the preceding-sibling::axis. > >cheers > > >I~I~ > > > -----Original Message----- > > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Jon Steeves > > Sent: Wednesday, April 23, 2003 3:11 PM > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] Confounded by grand-parents > > > > > > Hello: > > Here's the xml I'm working with: > > > > <blocks> > > <block> > > <registers> > > <register/> > > <register/> > > </registers> > > </block> > > <block> > > <registers> > > <register/> > > <register/> > > </registers> > > </block> > > </blocks> > > > > I want to process a register node if: > > 1. It is the first register node and > > 2. Its block grandparent is the first block node. > > > > Here's what I've come up with so far, but it isn't working. > > > > <xsl:template match="register"> > > <xsl:choose> > > <xsl:when test="parent::*[position()=1]/parent::* and position()=1"> > > > > Can someone clear up my thinking here? > > > > > > Cheers > > > > > > Jon Steeves > > Technical Communications > > (604) 415-6053 ext. 2139 > > jon_steeves@xxxxxxxxxxxxxx > > > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > > > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list Rick Taylor XML Developer PPDM Association XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Confounded by grand-paren, Michael Kay | Thread | [xsl] Re: document not there ambigu, S Woodside |
Re: [xsl] Merge 2 files and sort ou, J.Pietschmann | Date | Re: [xsl] Re: document not there am, Daniel Veillard |
Month |