<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: re-use code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 12 Oct 2008 07:29:56 GMT</pubDate>
    <description>DZone Snippets: re-use code</description>
    <item>
      <title>Transforming an XML file into an XSL file</title>
      <link>http://snippets.dzone.com/posts/show/4842</link>
      <description>This XSL uses the XML for creating another XSL file which renders a web page containing records for a specific project, but I have found the projects I am working on use similar page layouts (ie. menu, body(articles), inputs, and buttons), so it makes sense to re-use a generic template.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;xsl:template match="recordx"&gt;&lt;br /&gt;    &lt;xsl:variable name="colon"&gt;&lt;xsl:text&gt;:&lt;/xsl:text&gt;&lt;/xsl:variable&gt;&lt;br /&gt;    &lt;xsl:element name="xsl:stylesheet"&gt;&lt;br /&gt;      &lt;xsl:attribute name="xmlns{$colon}xsl"&gt;&lt;br /&gt;        &lt;xsl:text&gt;http://www.w3.org/1999/XSL/Transform&lt;/xsl:text&gt;&lt;br /&gt;      &lt;/xsl:attribute&gt;&lt;br /&gt;      &lt;xsl:attribute name="version"&gt;&lt;br /&gt;        &lt;xsl:text&gt;1.0&lt;/xsl:text&gt;&lt;br /&gt;      &lt;/xsl:attribute&gt;&lt;br /&gt;      &lt;xsl:element name="xsl:template"&gt;&lt;br /&gt;      &lt;xsl:attribute name="match"&gt;&lt;br /&gt;        &lt;xsl:value-of select="summary/project"/&gt;&lt;xsl:text&gt;page&lt;/xsl:text&gt;&lt;br /&gt;      &lt;/xsl:attribute&gt;&lt;br /&gt;      &lt;xsl:copy-of select="menu/*"/&gt;&lt;br /&gt;      &lt;xsl:copy-of select="articles/*"/&gt;&lt;br /&gt;      &lt;/xsl:element&gt;&lt;br /&gt;      &lt;xsl:element name="xsl:template"&gt;&lt;br /&gt;        &lt;xsl:attribute name="match"&gt;&lt;br /&gt;          &lt;xsl:value-of select="summary/project"/&gt;&lt;xsl:text&gt;page/inputs&lt;/xsl:text&gt;&lt;br /&gt;      &lt;/xsl:attribute&gt;&lt;br /&gt;      &lt;xsl:element name="div"&gt;&lt;br /&gt;        &lt;xsl:element name="dl"&gt; &lt;br /&gt;          &lt;xsl:for-each select="records/fields"&gt;&lt;br /&gt;            &lt;xsl:if test="c='true'"&gt;&lt;br /&gt;              &lt;xsl:element name="xsl:apply-templates"&gt;&lt;br /&gt;                &lt;xsl:attribute name="select"&gt;&lt;xsl:copy-of select="field"/&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;              &lt;/xsl:element&gt;&lt;br /&gt;            &lt;/xsl:if&gt;&lt;br /&gt;          &lt;/xsl:for-each&gt;&lt;br /&gt;        &lt;/xsl:element&gt;&lt;br /&gt;      &lt;/xsl:element&gt;&lt;br /&gt;      &lt;/xsl:element&gt;      &lt;br /&gt;      &lt;xsl:call-template name="inputx" /&gt;      &lt;br /&gt;    &lt;/xsl:element&gt;&lt;br /&gt;  &lt;/xsl:template&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;xsl:template name="inputx"&gt;&lt;br /&gt;    &lt;xsl:apply-templates select="records/fields"/&gt;&lt;br /&gt;  &lt;/xsl:template&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;xsl:template match="records/fields"&gt;&lt;br /&gt;    &lt;xsl:if test="c='true'"&gt;&lt;br /&gt;    &lt;xsl:element name="xsl:template"&gt;&lt;br /&gt;      &lt;xsl:attribute name="match"&gt;&lt;xsl:value-of select="field"/&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;        &lt;dt&gt;&lt;br /&gt;          &lt;xsl:element name="label"&gt;&lt;br /&gt;            &lt;xsl:attribute name="for"&gt;&lt;xsl:text&gt;title&lt;/xsl:text&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;            &lt;xsl:element name="xsl:value-of"&gt;&lt;br /&gt;              &lt;xsl:attribute name="select"&gt;&lt;xsl:text&gt;@title&lt;/xsl:text&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;            &lt;/xsl:element&gt;&lt;br /&gt;          &lt;/xsl:element&gt;&lt;br /&gt;        &lt;/dt&gt;&lt;br /&gt;        &lt;dd&gt;&lt;br /&gt;          &lt;xsl:element name="input"&gt;&lt;br /&gt;            &lt;xsl:attribute name="type"&gt;&lt;xsl:text&gt;text&lt;/xsl:text&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;            &lt;xsl:attribute name="id"&gt;&lt;xsl:text&gt;title&lt;/xsl:text&gt;&lt;/xsl:attribute&gt;&lt;br /&gt;            &lt;xsl:attribute name="size"&gt;&lt;xsl:text&gt;{@size}&lt;/xsl:text&gt;&lt;/xsl:attribute&gt;            &lt;br /&gt;          &lt;/xsl:element&gt;&lt;br /&gt;        &lt;/dd&gt;&lt;br /&gt;    &lt;/xsl:element&gt;&lt;br /&gt;    &lt;/xsl:if&gt;&lt;br /&gt;  &lt;/xsl:template&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/xsl:stylesheet&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;... and here's the XML which is used by the XSL above.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;recordx&gt;&lt;br /&gt;&lt;summary&gt;&lt;project&gt;books&lt;/project&gt;&lt;parent_element&gt;book_entry&lt;/parent_element&gt;&lt;/summary&gt;&lt;br /&gt;&lt;menu&gt;&lt;br /&gt;  &lt;div id="gboxes"&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;&lt;a href="/empsearch/devsearch.xml?id=all"&gt;home&lt;/a&gt;&lt;/li&gt; &lt;br /&gt;      &lt;li&gt;&lt;a href="/main/development_blog.xml"&gt;development&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/menu&gt;&lt;br /&gt;&lt;articles&gt;&lt;br /&gt;  &lt;div id="articles"&gt;&lt;br /&gt;    &lt;h1&gt;www&lt;xsl:value-of select="@title" /&gt;&lt;/h1&gt;&lt;br /&gt;    &lt;div&gt;&lt;br /&gt;      &lt;xsl:apply-templates select="inputs"&gt;&lt;/xsl:apply-templates&gt;&lt;br /&gt;    &lt;/div&gt;&lt;br /&gt;    &lt;div&gt;&lt;br /&gt;      &lt;xsl:apply-templates select="buttons"&gt;&lt;/xsl:apply-templates&gt;&lt;br /&gt;    &lt;/div&gt;&lt;br /&gt;    &lt;span id="in1"&gt;&lt;/span&gt;&lt;br /&gt;  &lt;/div&gt; &lt;br /&gt;&lt;/articles&gt;&lt;br /&gt;&lt;records&gt;&lt;br /&gt;&lt;fields id='17647'&gt;&lt;field&gt;author&lt;/field&gt;&lt;c&gt;true&lt;/c&gt;&lt;r&gt;true&lt;/r&gt;&lt;u&gt;true&lt;/u&gt;&lt;/fields&gt;&lt;br /&gt;&lt;fields id='17675'&gt;&lt;field&gt;subject&lt;/field&gt;&lt;c&gt;true&lt;/c&gt;&lt;r&gt;true&lt;/r&gt;&lt;u&gt;false&lt;/u&gt;&lt;/fields&gt;&lt;br /&gt;&lt;fields id='17699'&gt;&lt;field&gt;rating&lt;/field&gt;&lt;c/&gt;&lt;r/&gt;&lt;u/&gt;&lt;/fields&gt;&lt;br /&gt;&lt;fields id='17700'&gt;&lt;field&gt;last_modified&lt;/field&gt;&lt;c/&gt;&lt;r/&gt;&lt;u/&gt;&lt;/fields&gt;&lt;br /&gt;&lt;/records&gt;&lt;br /&gt;&lt;/recordx&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Tue, 04 Dec 2007 19:56:00 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4842</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
  </channel>
</rss>
