Subject: Re: [xsl] testing for position of an element and displaying it accordingly From: ms <mina_hurray@xxxxxxxxx> Date: Thu, 25 Jan 2007 09:40:45 -0800 (PST) |
Hi all: Thank you for all your input. I tried to implement all the suggestions and concepts. Here is waht I came up with: My sample xml: <r1> <a><para>Some test</a></para> <a><para>Some other test</a></para> <text><para>This is level1</para></text> <!--I can have any element here text, table --> <a><para>Some test 3</a></para> <r1> My desired output: Some test Some other test 1. This is level1 Some test 3 Like I said before I was numbering r1..r10. So now fo r1 template: <xsl:template match="r1"> <xsl:call-template name="test"> <xsl:with-param name="format">1</xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="test"> <xsl:param name="format"/> <xsl:if test="a"> <xsl:apply-templates select="a"/> </xsl:if> <fo:list-block space-before="6pt" space-before.conditionality="retain"> <fo:list-item space-before="6pt"> <fo:list-item-label end-indent="label-end()"> <xsl:choose> <xsl:when test="$format = '1'"> <fo:block> <fo:inline> <xsl:number format="1"/>.</fo:inline> </fo:block> </xsl:when> </xsl:choose> </fo:list-item-label> <fo:list-item-body start-indent="body-start()" end-indent="0pt"> <fo:block> <xsl:apply-templates select="*[not(self::a)]"/> </fo:block> </fo:list-item-body> </fo:list-item> </fo:list-block> </xsl:template> What happens here is, I check for 'a" before the formatting, so if there is an <a> element it applies templates. But since int he end I have said <xsl:apply-templates select="*[not(self::a)]"/>, it does not match templates after the text, or table elements. text and table are just examples and there can be any element here. So now I get Some test Some other test Some test 3 1. This is level1 My question now is how do I match template if the <a> element appears after a text element or any other element. If I say, <xsl:apply-templates/> instead of <xsl:apply-templates select="*[not(self::a)]"/>, then I get: Some test Some other test Some test 3 1. Some test Some other test Some test 3 This is level1 since it matches all templates then. This is tricky. Can you please tell me how to resolve this issue? --- David Carlisle <davidc@xxxxxxxxx> wrote: > > you don't appear to have changed the code at all in > response to teh > previous comments. > > > you have (as before) > > <xsl:template match="r1"> > <xsl:if test="child::a"> > <xsl:apply-templates select="a" mode="t"/> > </xsl:if> > > The xsl:if here soes nothing at all this is > equivalent to > > <xsl:template match="r1"> > <xsl:apply-templates select="a" mode="t"/> > > > and by specifying select="a" you are selecting all > the a elements > to be processed first, before any other elements. > You do not want that, > so select all children, not just a ones, then they > will be processed in > the natural order. > > <xsl:template match="r1"> > <xsl:apply-templates/> > </xsl:template> > > then have templates for a and test that do the right > thing > > <xsl:template match="a"> > <fo:block><xsl:number/>: > <xsl:apply-templates/></fo:block> > </xsl:template> > > <xsl:template match="text"> > <fo:block><xsl:apply-templates/></fo:block> > </xsl:template> > > which is exactly Michael's suggestion in the message > that you quoted. > > David > > ____________________________________________________________________________________ Get your own web address. Have a HUGE year through Yahoo! Small Business. http://smallbusiness.yahoo.com/domains/?p=BESTDEAL
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] testing for position of a, David Carlisle | Thread | Re: [xsl] testing for position of a, David Carlisle |
Re: [xsl] Input requested for a goo, Rashmi Rubdi | Date | Re: [xsl] testing for position of a, David Carlisle |
Month |