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

Re: decorator / wrapper design pattern

Subject: Re: decorator / wrapper design pattern
From: Stef <stef@xxxxxxxxx>
Date: Fri, 18 Mar 2005 10:00:45 -0500
decorator design pattern
Hello Lucas,
	It sounds (to me at least) very much like you want
to apply mutliple tags via XSLT. There is a really great
write-up of how someone solved this on the following link;

	http://www.dpawson.co.uk/xsl/sect2/multitags.html

	Its a lot more in-depth than any solution I could
give, and infact, I merely (when I need to do this) exactly
specify something like;

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:template match="/">
        <xsl:apply-templates />
</xsl:template>

<xsl:template match="title|paragraph">
  <i><xsl:apply-templates /></i>
</xsl:template>

<xsl:template match="title">
  <i><b><xsl:apply-templates /></b></i>
</xsl:template>

</xsl:stylesheet>


	use that and you should get a hint as to how apply-templates
works on matches ;>

	regards
	Stef
(ps. I am still learning this crazy thing called XSLT,
so any mistakes, feel free to scream and point :)

On Fri, Mar 18, 2005 at 02:37:10PM +0100, Schaik, L.B. van wrote:
> Hi,
> 
> I'm using XSL version 1.0 and am trying to use the decorator design
> pattern, but can't get it to work in XSL.
> Here is what I try to achieve:
> Different types of elements all need to be surrounded by the same text.
> For example:
> 
> I've XML:
> <base>
>   <section>
>      <title>the title</title>
>      <paragraph>some text</paragraph>
>      <paragraph>more text</paragraph>
>   </section>
>   <section>
>      <title>the title</title>
>      <paragraph>other text</paragraph>
>      <paragraph>more other text</paragraph>
>      <paragraph>and more text</paragraph>
>   </section>
> </base>
> 
> Now I want all text in titles and in paragraphs to be italic and in
> titles also to be bold.
> My first thought was to use call-template like this:
> <xsl:template match="title">
>   <xsl:call-template name="bold">
>     <xsl:call-template name="italic">
>        <xsl:value-of select="."/>
>     </xsl:call-template>
>   </xsl:call-template>
> </xsl:template>
> 
> But this is not the way to do this.
> I cannot however figure out or find the solution. The decoration that
> must be applied is much more complicated than bold or italic, but that
> is besides the point, I think.
> Here is my second try, but here is the problem that I cannot nest
> decorators, so bold and italic is not possible on the same element:
> 
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
> 
> <xsl:template match="/">
>   <xsl:call-template name="body"/>
> </xsl:template>
> 
> <xsl:template match="section">
>   <xsl:apply-templates />
>   <br/>
> </xsl:template>
> 
> <xsl:template match="title">
>   <xsl:call-template name="bold" />
>   <br/>
> </xsl:template>
> 
> <xsl:template match="paragraph">
>   <xsl:call-template name="italic" />
> </xsl:template>
> 
> <xsl:template name="bold">
>   <b>
>      <xsl:apply-templates/>
>   </b>
> </xsl:template>
> 
> <xsl:template name="italic">
>   <i>
>      <xsl:apply-templates/>
>   </i>
> </xsl:template>
> 
> <xsl:template name="body">
>   <html>
>     <body>
>       <xsl:apply-templates />
>     </body>
>   </html>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> 
> Can anybody give me a pointer?
> 
> Thanks in advance
> 
> Lucas

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.