|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: RE: Will this work?
I promissed an example. Well, here it is..
Last week I was working on a Cocoon webapp that takes 'xhtml' templates and combines them with xml data to generate html pages. I invented a new namespace with prefix tp to which a stylesheet responds by replacing these instructions by xsl instructions. The whole template file itself is kind of inserted into a xsl:template match="/" to make it work. the tp:insert-param instruction was actually intended to access a Cocoon or http url to get dynamic parameters, but it can be used to access a more static xml file just as well.. I am inserting a template and the meta stylesheet below. Apply the stylesheet to the template and try to identify how the resulting stylesheet matches to the template. Grtz, Geert wellformed HTML template .tpl: <?xml version="1.0" encoding="utf-8"?>
<HTML xmlns:tp="http://www.daidalos.nl/schemas/template/1.0">
<HEAD>
<!-- Generated by javadoc on Tue Sep 21 16:38:10 GMT+01:00 2004-->
<tp:comment>Generated by</tp:comment>
<TITLE>
<tp:insert-param name="name" default="XSLdoc" />
<tp:text> (</tp:text>
<tp:insert-param name="version" default="1.0" />
<tp:text>) - Package</tp:text>
</TITLE>
<META NAME="keywords">
<tp:attribute name="CONTENT">
<tp:text>Package, </tp:text>
<tp:insert-param name="/classes/@package-path" />
</tp:attribute>
</META>
<LINK REL ="stylesheet" TYPE="text/css" TITLE="Style">
<tp:attribute name="HREF">
<tp:revert-path select="translate(/classes/@package-path, '.', '/')" />
<tp:text>javadoc.css</tp:text>
</tp:attribute>
</LINK>
</HEAD> <BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="package-summary.html" target="classFrame">
<tp:value select="/classes/@package-path" />
</A>
</FONT> <TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP="">
<FONT size="+1" CLASS="FrameHeadingFont">
Classes
</FONT>
<BR />
<FONT CLASS="FrameItemFont">
<tp:for-each select="/classes/class">
<A target="classFrame">
<tp:attribute name="title">
<tp:text>class in </tp:text>
<tp:value select="../@package-path" />
</tp:attribute>
<tp:attribute name="HREF">
<tp:value select="translate(@relative-path, '.', '/')" />
<tp:text>.</tp:text>
<tp:value select="@type" />
<tp:text>.html</tp:text>
</tp:attribute>
<tp:value select="@relative-path" />
<tp:text> (</tp:text>
<tp:value select="@type" />
<tp:text>)</tp:text>
</A>
<BR />
</tp:for-each>
</FONT>
</TD>
</TR>
</TABLE></BODY> </HTML> template2xsl.xsl: <?xml version="1.0" encoding="UTF-8"?> <!-- $Id$ --> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tp-xsl="http://www.w3.org/1999/XSL/TransformAlias"
xmlns:tp="http://www.daidalos.nl/schemas/template/1.0"
exclude-result-prefixes="tp"
><!--+ ==============================================================
| parameters
+--><xsl:namespace-alias stylesheet-prefix="tp-xsl" result-prefix="xsl"/> <xsl:output method="xml"
version="1.0" encoding="utf-8" indent="yes" /><!--+ ==============================================================
| default templates
+--> <xsl:template match="@*|node()">
<xsl:copy-of select="." />
</xsl:template> <xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template><xsl:template match="tp:*"> <xsl:message terminate="yes"> Unknown or incorrect template instruction <xsl:value-of select="name()" /> within context <xsl:value-of select="name(parent::*)"/> </xsl:message> </xsl:template> <!--+ ==============================================================
| root template
+--> <xsl:template match="/">
<tp-xsl:stylesheet version="1.0"> <tp-xsl:output method="xml"
version="1.0" encoding="utf-8" indent="yes" /> <tp-xsl:param name="parameter-url" />
<tp-xsl:param name="parameters" select="document($parameter-url)/*" /> <tp-xsl:template match="/">
<xsl:apply-templates select="@*|node()" />
</tp-xsl:template><tp-xsl:template name="revert-path"> <tp-xsl:param name="path" /> <tp-xsl:param name="count" select="string-length($path) - string-length(translate($path, '/', ''))" /> <tp-xsl:if test="$count > 0">
<tp-xsl:text>../</tp-xsl:text>
<tp-xsl:call-template name="revert-path">
<tp-xsl:with-param name="path" select="$path" />
<tp-xsl:with-param name="count" select="$count - 1" />
</tp-xsl:call-template>
</tp-xsl:if>
</tp-xsl:template></tp-xsl:stylesheet> </xsl:template> <!--+ ==============================================================
| templates
+--> <xsl:template match="tp:insert-param[@name]">
<tp-xsl:variable name="param-name-{generate-id()}" select="'{@name}'" />
<tp-xsl:variable name="value" select="$parameters/*[name() = $param-name-{generate-id()}]" /> <tp-xsl:choose>
<tp-xsl:when test="$value">
<tp-xsl:value-of select="$value" />
</tp-xsl:when>
<tp-xsl:otherwise>
<xsl:value-of select="@default" />
</tp-xsl:otherwise>
</tp-xsl:choose>
</xsl:template> <xsl:template match="tp:value[@select]">
<tp-xsl:value-of select="{@select}">
<xsl:if test="@escape = 'no'">
<xsl:attribute name="disable-output-escaping">yes</xsl:attribute>
</xsl:if>
</tp-xsl:value-of>
</xsl:template> <xsl:template match="tp:revert-path[@select]">
<tp-xsl:call-template name="revert-path">
<tp-xsl:with-param name="path" select="{@select}" />
</tp-xsl:call-template>
</xsl:template> <xsl:template match="tp:text">
<tp-xsl:text>
<xsl:if test="@escape = 'no'">
<xsl:attribute name="disable-output-escaping">yes</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</tp-xsl:text>
</xsl:template> <xsl:template match="tp:for-each[@select]">
<tp-xsl:for-each select="{@select}">
<xsl:apply-templates select="node()" />
</tp-xsl:for-each>
</xsl:template> <xsl:template match="tp:attribute[@name]">
<tp-xsl:attribute name="{@name}">
<xsl:apply-templates select="node()" />
</tp-xsl:attribute>
</xsl:template> <xsl:template match="tp:comment">
<tp-xsl:comment>
<xsl:apply-templates select="node()" />
</tp-xsl:comment>
</xsl:template> <xsl:template match="tp:copy[@select]">
<tp-xsl:variable name="copy-{generate-id(.)}" select="{@select}" />
<tp-xsl:choose>
<tp-xsl:when test="$copy-{generate-id(.)}">
<tp-xsl:copy-of select="$copy-{generate-id(.)}" />
</tp-xsl:when>
<tp-xsl:otherwise>
<xsl:apply-templates select="tp:fallback/node()" />
</tp-xsl:otherwise>
</tp-xsl:choose>
</xsl:template></xsl:stylesheet>
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








