I was wondering if there is a good approach in the XSLT style design template to separate the general and specific presentation of the data.
I tried, but was very embarrassed and lost. I would appreciate any tips, hints, tips where I can read about how best to separate XSLT stylesheets. And also, it would be very helpful to help with the example below, since it does not work = / THANKS!
I need to create a variety of HTML documents with different views that will reuse some data. For example, document date, signature details (name, position), etc. In addition, I use quite a few global variables (since XML is not structured and data is reused in all documents).
What I tried to do is move all the templates that will create a common HTML structure in one stylesheet, and then all the specific bits will be in their own stylesheet.
Something like the following:
General Temple Style Sheets "commonTemplates.xsl"
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> ... <xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd" indent="yes" /> <xsl:template match="/Bookings"> <html> <head> <title><xsl:call-template name="docTitle"/></title> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="/Bookings/Booking" name="docDate"> <p class="date"><xsl:value-of select="./@Date"/></p> </xsl:template> <xsl:template match="/Bookings/Booking/Users" name="signature"> <xsl:param name="signatureLine" select="'Yours sincerely,'"/> <div id="signature"> <p><xsl:value-of select="$signatureLine"/></p> <p class="details"> <xsl:apply-templates select="." mode="signature"/> </p> </div> </xsl:template> <xsl:template name="docTitle"/> </xsl:stylesheet>
A specific table of styles of temples:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:import href="commonTemplates.xsl"/> <xsl:template match="/Bookings/Booking"> <xsl:call-template name="docDate"/> <div> <xsl:call-template name="content" /> </div> </xsl:template> <xsl:template name="docTitle"> <xsl:text>Here is the document title</xsl:text> </xsl:template> <xsl:template name="content"> <p>SOME CONTENT</p> <xsl:apply-templates /> </xsl:template> <xsl:template match="/Bookings/Booking/Users" mode="signature"> <span class="name"><xsl:value-of select="./@Name"/></span> <span class="job"><xsl:value-of select="./@Title"/></span> </xsl:template> </xsl:stylesheet>
Unfortunately, the signature template does not work, and I cannot understand why :( It does this for docTitle.
HTML results are as follows:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <p class="date">16 February 2010</p> <div id="secondDeposit"> <p>SOME CONTENT</p> </div> </body>
I was wondering if it is possible to realize this idea as a whole and how to do it correctly, it is obvious that my work does not work.
Also, which approach would be better in this case: include or import a stylesheet? I think that with one of them I do not need to list all the variables again.
I would be grateful for any help! Sorry for the long post, and if it is not so clear.
Thanks!