[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] And I'd like that in triplicate...
Subject: Re: [xsl] And I'd like that in triplicate...
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Wed, 19 Mar 2008 15:10:55 -0400
|
Jeremy,
Adding to what Ken said....
The first decision you'll have to make is whether you want the three
copies as a single PDF, or as multiple PDFs. If the former, you will
would most likely generate each of the three copies as a separate
page-sequence. In that case your stylesheet would having something
logically like this:
<xsl:template match="/">
<fo:root>
<xsl:call-template name="page-architecture"/>
<xsl:apply-templates>
<xsl:with-param name="copy" select="'merchant'"/>
</xsl:apply-templates>
<xsl:apply-templates>
<xsl:with-param name="copy" select="'customer'"/>
</xsl:apply-templates>
<xsl:apply-templates>
<xsl:with-param name="copy" select="'file'"/>
</xsl:apply-templates>
</fo:root>
</xsl:template>
where a page sequence results from each apply-templates traversal.
In other words, perform the same logic three times, but pass a
parameter in to differentiate between them.
Then, when you generate your content, you test against the value of
your parameter to determine which copy you're making.
This is easier to implement in XSLT 2.0, which has a feature called
"tunnel parameters", which allows you to avoid having to pass your
parameters explicitly through every template you use. This is
cumbersome, but unfortunately necessary in XSLT 1.0.
If you want three separate PDFs, you can declare your parameters at
the top level and pass them in at runtime. This is a bit easier in
1.0, since global parameters are available in every template and thus
don't have to be passed through explicitly. To run this, you'd simple
invoke your stylesheet on your document three times, setting the
parameter value differently for each.
Either way, the answer to the question "How do I do exactly the same
thing with minor exceptions three ways" is simply to do the thing
three times, using a parameter to drive the differentiations.
Look up xsl:param and xsl:with-param for more. Use tunnel parameters
in XSLT 2.0 if you can.
Cheers,
Wendell
At 02:49 PM 3/19/2008, you wrote:
At 2008-03-19 12:50 -0500, Ferry, Jeremy wrote:
I've got a xsl-fo stylesheet that I've created to output an xml document
as a PDF but I'm having trouble figuring out how I would produce
multiple copies, each one having only minor differences in some static
content. Think of it like a credit card receipt - one copy for the
merchant and one for the customer - the only difference being the text
that says "Merchant Copy" or "Customer Copy".
There is nothing in XSL-FO that automatically replicates content for
a specific number of iterations ... if you want three copies, then
you have to generate all three copies during your transformation
stage, and then format the collection of three copies found in your
generated XSL-FO.
As to the minor variances, if you meant "static content"
generically, then you would do this during your transformation
creating the three copies with a slight difference through typical XSLT logic.
If you meant "Static Content" as in header and footer content of an
XSL-FO instance, then you have the option of using the identical
XSLT logic three times, where in the header you retrieve a marker of
a given name each time. Then in your XSLT you just define the
marker content before creating each of the copies of the receipt content.
I hope this helps.
. . . . . . . . . . . Ken
--
Upcoming: UBL Apr.22,24; genericode code lists Apr.23; Rome,Italy
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds: publicly-available developer resources and training
G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
======================================================================
Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
|