[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: testing for position of an element and displaying

Subject: Re: 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)
Re:  testing for position of an element and displaying
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.