<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Bovine Spirit</title>
    <description>The ramblings of Matthew West</description>
    <link>http://www.matthewwest.co.uk/blog</link>
    <pubDate>Mon, 17 Sep 2007 00:01:25 GMT</pubDate>
    <item>
      <title>Find Fixtures Without Thinking</title>
      <link>http://www.matthewwest.co.uk/blog/2007/9/16/12-find-fixtures-without-thinking</link>
      <description>&lt;p&gt;This is a good trick I use on the Jands Echelon and the Hog 2 when I don&amp;#8217;t know how a rig&amp;#8217;s been patched.  The problem is to find out where individual lanterns have been plugged in without having to think about it too hard.  To start with I create a group of all dimmer channels, called &amp;#8216;All Dimmers&amp;#8217;.  If I&amp;#8217;m feeling nice I&amp;#8217;ll fade the group up to around 15% for a while to let the fixtures warm up.  Then I&amp;#8217;ll select the group and press &lt;code&gt;&amp;lt;Highlight&amp;gt;&lt;/code&gt;.  Next up I&amp;#8217;ll step through the individual lanterns using the &lt;code&gt;&amp;lt;Next&amp;gt;&lt;/code&gt; button.  When I find one that&amp;#8217;s a Source 4 I press &lt;code&gt;&amp;lt;@&amp;gt;  &amp;lt;Full&amp;gt;&lt;/code&gt;.  Once I&amp;#8217;ve stepped though all the fixtures all the Source 4s are on at full blast.  I then press &lt;code&gt;&amp;lt;Active&amp;gt; &amp;lt;@&amp;gt;  &amp;lt;Full&amp;gt;&lt;/code&gt;.  This loads all fixtures at 100% into the programmer.  I can then save a new group called &amp;#8216;All S4s&amp;#8217;.&lt;/p&gt;


	&lt;p&gt;Now that I&amp;#8217;ve found all the Source 4&amp;#8217;s, I can then find all the Par Cans, Pin Spots and whatever else is lurking in the rig.  To select the lights I&amp;#8217;ll use &lt;code&gt;'All Dimmers' &amp;lt;-&amp;gt; 'All S4s'&lt;/code&gt;.  This selects everything but the Source 4s,  I can then find all the Par Cans and save that as a group.&lt;/p&gt;


	&lt;p&gt;Once I have my groups of lanterns I can then subdivide them.  If I&amp;#8217;ve already found all the Source 4s I can select them, and set all the Source 4s that I wish to use as a dappled wash to 100%, then use &lt;code&gt;&amp;lt;Active&amp;gt; &amp;lt;@&amp;gt; &amp;lt;Full&amp;gt;&lt;/code&gt; to select them before saving the new group.  I can then use &lt;code&gt;'Source 4s' &amp;lt;-&amp;gt; 'Dapple'&lt;/code&gt; to select the remaining Source 4s that I wish to use as spots, and save that as a group.&lt;/p&gt;


	&lt;p&gt;The important thing to remember is that if any masters are on with fixtures at full then those fixtures will also be loaded into the programmer by &lt;code&gt;&amp;lt;Active&amp;gt; &amp;lt;@&amp;gt; &amp;lt;Full&amp;gt;&lt;/code&gt;.  If I&amp;#8217;m leaving lights on for working light etc then I put those masters at 80%.&lt;/p&gt;


	&lt;p&gt;The end result is that I have all the lanterns arranged into useful groups that I can either use to create &lt;span class="caps"&gt;HTP&lt;/span&gt; masters or include into more complicated programming without having to remember or write down a single channel number.  The disadvantage is that I cannot grab individual fixtures if I&amp;#8217;m getting glare etc.  In practise this isn&amp;#8217;t too much of a problem.&lt;/p&gt;</description>
      <pubDate>Mon, 17 Sep 2007 00:01:25 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2007-09-16:12      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>Bush Hall Reviews</title>
      <link>http://www.matthewwest.co.uk/blog/2007/6/3/11-bush-hall-reviews</link>
      <description>&lt;p&gt;Lucky Soul&amp;#8217;s gig at Bush Hall got some very good reviews, a couple even mentioned the lighting&amp;#8230;  Some fabulously purple prose from &lt;span class="caps"&gt;BBC&lt;/span&gt; London:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Few can resist shimmying along as the room is transformed into a snow globe of light and magic, complete with twinkling fairy lights and glittering disco-ball.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Twinkles and glitter?  Maybe I should do less weddings&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Links:&lt;/em&gt; &lt;a href="http://www.independent.co.uk/arts/music/reviews/article2562988.ece"&gt;The Independent&lt;/a&gt;, &lt;a href="http://music.guardian.co.uk/pop/livereviews/story/0,,2085172,00.html"&gt;The Guardian&lt;/a&gt;, &lt;a href="http://www.bbc.co.uk/london/content/articles/2007/05/21/lucky_soul_bush_hall_feature.shtml"&gt;&lt;span class="caps"&gt;BBC&lt;/span&gt; London&lt;/a&gt;, &lt;a href="http://www.artrocker.com/reviews/gigs/lucky-soul"&gt;ArtRocker&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 04 Jun 2007 00:40:59 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2007-06-03:11      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>Lucky Soul at Bush Hall</title>
      <link>http://www.matthewwest.co.uk/blog/2007/5/25/10-lucky-soul-at-bush-hall</link>
      <description>&lt;p&gt;&lt;span class="vcard"&gt;&lt;a class="url fn org" href="http://www.luckysoul.co.uk"&gt;Lucky Soul&lt;/a&gt;&lt;/span&gt; played their biggest headline gig to date at Bush Hall, London on 16th May, 2007.  &lt;span class="vcard"&gt;&lt;a class="url fn org" href="http://www.starlight-design.co.uk"&gt;Starlight Design&lt;/a&gt;&lt;/span&gt; generously provided 2 Mac 550s, some pealights, an Echelon and various other bits and bobs for me to light them with.  I also used the house rig.&lt;/p&gt;


	&lt;p&gt;I didn&amp;#8217;t have time to take any photos, but there are loads on Flickr.  The lighting was very &amp;#8216;photographer friendly&amp;#8217; as the band were hoping for some press interest, which seems to have worked out.  The pealights worked well at the time, as they gave a nice backdrop for the band.  Most of the photos seem to have been taken from the front looking up at the remarkable Bush Hall ceiling which I lit using the Mac 550s.&lt;/p&gt;


	&lt;p&gt;Having seen the band in some smaller venues I was interested to see how they&amp;#8217;d cope with something bigger.  With a better PA and a bigger room and audience they seemed to move up a gear and they played a blinder.  The whole show had more kick, and they seemed to grow to fill the space.  Hopefully they&amp;#8217;ll be counting Bush Hall as a small gig soon enough&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Photo Links: &lt;a href="http://www.flickr.com/photos/kennethyau/sets/72157600232512520/"&gt;1&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/kjeal/sets/72157600231068710/"&gt;2&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/lornethomson/sets/72157600223513563/"&gt;3&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 27 May 2007 19:19:49 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2007-05-25:10      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>XSL Contents</title>
      <link>http://www.matthewwest.co.uk/blog/2005/2/21/9-xsl-contents</link>
      <description>&lt;p&gt;While I was building this website, I thought it would be nice to put a contents page on pages that have multiple sections, such as this one.  This would allow people to jump directly to the section that they were interested in, as well as providing a summary of the page.  Updating the contents page manually soon became a chore, and I would often forget, or make spelling mistakes that stopped it from working.  What was needed was a way of creating contents pages automatically.  As I was already using &lt;span class="caps"&gt;XSLT&lt;/span&gt; to create the pages to a standard template it seemed the best way to create the contents list would be to use &lt;span class="caps"&gt;XSLT&lt;/span&gt;.&lt;/p&gt;


	&lt;h3&gt;The Problem&lt;/h3&gt;


	&lt;p&gt;What I wanted to do was to take a document that was structured like this&amp;#8230;&lt;/p&gt;


&lt;pre class="xml"&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Heading 1&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Heading 2&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;...and transform it into something like this&amp;#8230;&lt;/p&gt;


&lt;pre class="xml"&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;ul&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt; &lt;span class="attribute"&gt;href&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;#Heading_1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 1&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt; &lt;span class="attribute"&gt;href&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;#Heading_2&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 2&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;ul&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt; &lt;span class="attribute"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Heading_1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 1&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt; &lt;span class="attribute"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Heading_2&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 2&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;As you can see the contents list is contained in an unordered list, and each list item contains a link to the heading, using id tags.  The headings have had their id tags automatically inserted.  The id tag names are taken from the headings, so that it is easy to link to them from other pages.  However it should also be possible to specify an id tag.&lt;/p&gt;


	&lt;h3&gt;First Attempt&lt;/h3&gt;


	&lt;p&gt;For the initial attempt I&amp;#8217;m going to assume that the headers already have id tags, and look like this&amp;#8230;&lt;/p&gt;


&lt;pre class="xml"&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt; &lt;span class="attribute"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Heading_1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 1&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt; &lt;span class="attribute"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Heading_2&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;Heading 2&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;More text&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;I&amp;#8217;m also going to assume that the &lt;span class="caps"&gt;XSL&lt;/span&gt; template copies the body of the document across &amp;#8216;as is&amp;#8217;...&lt;/p&gt;


&lt;pre class="xml"&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;html&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;The &lt;code&gt;mode&lt;/code&gt; attribute allows different templates to match the same elements at different times. Thus the above template ensures that all elements are copied when in &amp;#8216;BodyCopy&amp;#8217; mode.  In order to insert the contents somewhere useful we&amp;#8217;re going to define a new element type.  This will not be copied into the final document, instead it will be replaced with the contents table.&lt;/p&gt;


&lt;pre class="xml"&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;contents&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;ul&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;html/body/*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ContentsList&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;ul&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ContentsList&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ContentsList&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ContentsList&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt; &lt;span class="attribute"&gt;href&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;{concat('#', @id)}&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;title&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;normalize-space(.)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;normalize-space(.)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;This creates the &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; tags, and selects the top of the source document to start the search for &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; tags.  This search is done in &amp;#8216;ContentsList&amp;#8217; mode, and nothing is copied by default.  When it comes across an &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; it creates a list item that links to an element in the document with the &lt;code&gt;id&lt;/code&gt; tag.  The text and title of the link are taken from the contents of the header tags.&lt;/p&gt;


	&lt;h3&gt;A More Sophisticated Solution&lt;/h3&gt;


	&lt;p&gt;The problem with the previous example is that all the &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; tags need to have their &lt;code&gt;id&lt;/code&gt; attributes set, which is the kind of tedious task the computer should do for itself.  Inserting the attributes can not happen as part of the &amp;#8216;ContentsList&amp;#8217; mode, as it is only reading elements, and can not edit them.  Instead we will change the elements during the main copying routine.  A small template is used to create the &lt;code&gt;id&lt;/code&gt;, so that it is the same in both places.&lt;/p&gt;


&lt;pre class="xml"&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;getId&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;normalize-space(@id)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;if&lt;/span&gt; &lt;span class="attribute"&gt;test&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;not(@id)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;translate(normalize-space(.), ' ', '_')&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;if&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ContentsList&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;variable&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;getId&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;variable&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt; &lt;span class="attribute"&gt;href&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;{concat('#', $id)}&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;title&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;normalize-space(.)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;normalize-space(.)&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;li&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;h3&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;attribute&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;getId&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;attribute&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;@* | node()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;BodyCopy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;copy&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

	&lt;p&gt;The &lt;span class="caps"&gt;XHTML&lt;/span&gt; specification does not allow spaces in id names, so the &lt;code&gt;translate()&lt;/code&gt; is used to turn them into underscores.  If there is already an &lt;code&gt;id&lt;/code&gt; specified then that is used.&lt;/p&gt;


	&lt;h3&gt;Conclusion&lt;/h3&gt;


	&lt;p&gt;The template presented is roughly what this site uses, although I have made some improvements.  One was to allow some &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; tags to be excluded from the contents list by adding a &lt;code&gt;list="no"&lt;/code&gt; attribute.  Another was to allow different a title to be used in the contents than the header text, however I haven&amp;#8217;t actually used this on the site.&lt;/p&gt;


	&lt;h3&gt;2007 Update&lt;/h3&gt;


	&lt;p&gt;I no longer use &lt;span class="caps"&gt;XSL&lt;/span&gt; to generate pages for this site, Ruby on Rails handles everything instead.  This has meant the loss of the contents boxes, as I haven&amp;#8217;t got around to replacing them.  I guess a solution would be to add an &lt;code&gt;after_filter&lt;/code&gt; to the Posts controller that used regular expressions to search for &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; tags, add in an &lt;code&gt;id&lt;/code&gt; and save them to an array, before creating the contents box.&lt;/p&gt;</description>
      <pubDate>Mon, 16 Apr 2007 02:35:24 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2005-02-21:9      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>New Website</title>
      <link>http://www.matthewwest.co.uk/blog/2007/4/15/8-new-website</link>
      <description>&lt;p&gt;This website used to be a mix of &lt;span class="caps"&gt;PHP&lt;/span&gt; scripts and &lt;span class="caps"&gt;XHTML&lt;/span&gt; files generated by some big, complicated &lt;span class="caps"&gt;XSL&lt;/span&gt; documents, Java programs and Python scripts, all co-ordinated by an Ant script.  In short it was a mess.  I&amp;#8217;ve replaced the whole lot with a Ruby on Rails application backed by a Postgresql database.  All pages are generated dynamically from the database.  By keeping everything in the database I hope to make backing up a lot simpler.&lt;/p&gt;


	&lt;p&gt;The &amp;#8216;static&amp;#8217; pages, such as the &lt;a href="/"&gt;index&lt;/a&gt; and the &lt;a href="/site-info"&gt;site info&lt;/a&gt; pages are created using &lt;a href="http://comatose.rubyforge.org/"&gt;Comatose&lt;/a&gt; while the blog, photos and moving light pages are home grown.  The site relies on a number of other plugins to get stuff done, mixed with an awful lot of my own code.  The blog is home made, after seeing so many examples of how easy it is to make a blog using RoR on the Web I thought I&amp;#8217;d try to do it myself.  IIt turns out that it&amp;#8217;s not quite so straightforward in real life.  I may yet switch over to Mephisto, or something similer.  I still prefer to host my own photos etc, rather than putting them on Flickr or suchlike.  I have a lot more control over how they are laid out and displayed.&lt;/p&gt;


	&lt;p&gt;The site is now hosted by &lt;a href="http://planetargon.com/"&gt;Planet Argon&lt;/a&gt; using &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt; and &lt;a href="http://wiki.codemongers.com/Nginx"&gt;Nginx&lt;/a&gt; after the mysterious disappearance of my old hosting company.&lt;/p&gt;


	&lt;p&gt;There is still stuff missing from the site which I hope to get sorted at some point.  As the site is now completely different I can&amp;#8217;t just copy and paste pages across.  The old computing pages have been reinvented as blog entries, which is why this blog has posts from &lt;a href="/blog/2002"&gt;2002&lt;/a&gt;.  The &amp;#8216;posted at&amp;#8217; dates for those come from the &lt;span class="caps"&gt;CVS&lt;/span&gt; repository for the old site, so I think they&amp;#8217;re fairly accurate.&lt;/p&gt;


	&lt;p&gt;I hope to add some more posts soon about how I solved some specific problems on this site.&lt;/p&gt;</description>
      <pubDate>Sun, 15 Apr 2007 19:46:26 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2007-04-15:8      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>Patching the Pearl Expert</title>
      <link>http://www.matthewwest.co.uk/blog/2007/4/14/7-patching-the-pearl-expert</link>
      <description>&lt;p&gt;I thought I&amp;#8217;d put this here so I don&amp;#8217;t forget.  When you&amp;#8217;re patching fixtures on the Avolites Pearl Expert you&amp;#8217;ve got to pick a manufacturer, then a fixture.  However there&amp;#8217;s around 200 manufacturers, and the screen only displays 5 at a time.  The trick is to check the number in the corner of the box by each manufacturers name.  If you type that number in it will take you to the right screen, saving a lot of button pushing.  It doesn&amp;#8217;t take you directly to the fixtures because new manufacturers are springing up all the time, so the numbers will change.&lt;/p&gt;


	&lt;p&gt;The same trick works when choosing fixtures as well.&lt;/p&gt;</description>
      <pubDate>Sun, 15 Apr 2007 19:18:21 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2007-04-14:7      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>Link Checker</title>
      <link>http://www.matthewwest.co.uk/blog/2002/8/19/3-link-checker</link>
      <description>&lt;p&gt;&lt;code&gt;LinkChecker&lt;/code&gt; is a program that checks web page links to make sure that they work.  When writing web pages it is easy to make a small typing error that results in a link that doesn&amp;#8217;t work.  Checking all the links on a web site is time consuming, and it is hard to be sure that they have all been checked.  This program checks each link on each page one by one, to make sure that they all work.&lt;/p&gt;


	&lt;h3&gt;Usage&lt;/h3&gt;


	&lt;p&gt;The program can be run from the command line like this:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;java -jar /path/to/LinkChecker.jar http://www.mysite.com/index.html -d2000&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;This will load the index page of &lt;code&gt;www.mysite.com&lt;/code&gt; and will check that every link works.  Each page that it finds a link to that is also on he same server will be checked in turn.  Thus the whole site should eventually be checked, as long as there are links between all the pages.  The &lt;code&gt;-d&lt;/code&gt; option specifies a delay time in milliseconds.  &lt;code&gt;-d2000&lt;/code&gt; specifies a delay of 2 seconds between each page access.  This is avoid overloading the server.  Each valid address is cached, so that it only needs to be looked up once.  If the computer is hosting a copy of a website, and is not connected to the Internet then the &lt;code&gt;-l&lt;/code&gt; will cause it to only check local addresses.&lt;/p&gt;


	&lt;p&gt;The program can only check web pages that are well-formed, which means that they comply with the w3c &lt;span class="caps"&gt;XML&lt;/span&gt; specification.  This probably means that it is limited to &lt;span class="caps"&gt;XHTML&lt;/span&gt; web pages.  The &lt;span class="caps"&gt;DTD&lt;/span&gt;&amp;#8217;s for &lt;span class="caps"&gt;XHTML&lt;/span&gt; are included in the .jar file.  If the web pages use different &lt;span class="caps"&gt;DTD&lt;/span&gt;&amp;#8217;s then the program will only work if the computer is connected to the Internet.&lt;/p&gt;


	&lt;p&gt;The program can also be called directly from an Ant build script.  First of all the task must be defined:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;&amp;lt;taskdef name="checklinks" 
           classname="uk.co.matthewwest.LinkChecker.LinkCheckerTask" 
       classpath="/path/to/LinkChecker.jar" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Then the task can be called like an other Ant task:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;&amp;lt;checklinks href="http://www.mysite.com/index.html" 
            delay="150" local="no" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;


	&lt;h3&gt;Version 0.2&lt;/h3&gt;


	&lt;p&gt;Version 0.2 corrects a couple of problems caused by upgrading of other parts.  Apache now gives longer content headers which include the charset while version 0.1 was looking for just &amp;#8220;text/html&amp;#8221;.  Modern versions of Java include an &lt;span class="caps"&gt;XML&lt;/span&gt; parser which gives a &lt;span class="caps"&gt;SAX&lt;/span&gt; warning seemingly every time it comes accross an entity, so version 0.2 suppresses warnings unless &amp;#8216;debug&amp;#8217; is set to true.&lt;/p&gt;


	&lt;h3&gt;Libraries&lt;/h3&gt;


	&lt;p&gt;Version 0.1 of the program is supplied with &lt;a href="http://xml.apache.org/xerces2-j/index.html "&gt;Xerces&lt;/a&gt;, an &lt;span class="caps"&gt;XML&lt;/span&gt; parser developed by the Apache Foundation.  Version 0.2 assumes a more modern version of Java, which comes with an &lt;span class="caps"&gt;XML&lt;/span&gt; library built in.  &lt;a href="http://jakarta.apache.org/ant/ "&gt;Ant&lt;/a&gt; is used to build the project.  There are also some &lt;span class="caps"&gt;DTD&lt;/span&gt;&amp;#8217;s included which were downloaded from the &lt;a href="http://www.w3c.com/"&gt;w3c&lt;/a&gt; website.&lt;/p&gt;


	&lt;h3&gt;Download&lt;/h3&gt;


	&lt;p&gt;The program is available for download as a &lt;a href="/docs/LinkChecker-0.2.zip"&gt;zip file&lt;/a&gt; , or as a &lt;a href="/docs/LinkChecker-0.2.tar.gz"&gt;tar file&lt;/a&gt; .  My code is released under the terms of the &lt;span class="caps"&gt;GPL&lt;/span&gt;.&lt;/p&gt;


	&lt;h3&gt;How It Works&lt;/h3&gt;


	&lt;p&gt;Each page is parsed by a &lt;span class="caps"&gt;SAX&lt;/span&gt; parser.  Every time the parser encounters a link(&lt;code&gt;&amp;lt;a&amp;gt;, &amp;lt;link&amp;gt;, &amp;lt;img&amp;gt;, &amp;lt;form&amp;gt;&lt;/code&gt;) it calls &lt;code&gt;checkUrl()&lt;/code&gt;.  This checks a &lt;code&gt;HashSet&lt;/code&gt; of previously validated addresses, and if the &lt;span class="caps"&gt;URL&lt;/span&gt; is not among them it attempts to connect to a server to retrieve it.  If it can then the &lt;span class="caps"&gt;URL&lt;/span&gt; is added to the &lt;code&gt;HashSet&lt;/code&gt;.  If the &lt;span class="caps"&gt;URL&lt;/span&gt; is on the same server as the first page and hasn&amp;#8217;t been checked it is added to a &lt;code&gt;LinkedList&lt;/code&gt; of pages pending checking.  If it cannot retrieve the page then it prints a message.  It then moves on to the next page in the list.&lt;/p&gt;</description>
      <pubDate>Fri, 13 Apr 2007 22:03:05 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2002-08-19:3      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>Photo Album</title>
      <link>http://www.matthewwest.co.uk/blog/2002/8/1/4-photo-album</link>
      <description>&lt;p&gt;&lt;strong&gt;Album&lt;/strong&gt; is a program that creates an &lt;span class="caps"&gt;HTML&lt;/span&gt; photo album.  All that is needed is an &lt;a href="http://www.w3.org/XML/"&gt;&lt;span class="caps"&gt;XML&lt;/span&gt;&lt;/a&gt; file that describes the layout of the album and provides captions etc, an &lt;a href="http://www.w3.org/Style/XSL/"&gt;&lt;span class="caps"&gt;XSL&lt;/span&gt;&lt;/a&gt; file describing the layout of the pages and the images themselves.  The images must be in Jpeg format, which most photo CD&amp;#8217;s seem to have.  The program automatically scales them so that their long edges are the same length.  It is assumed that they are already the right way up(some photo CD&amp;#8217;s don&amp;#8217;t do this).  The program takes all these and spits out a directory full of &lt;span class="caps"&gt;HTML&lt;/span&gt; pages and image files.  These can be uploaded straight onto a website.&lt;/p&gt;


	&lt;h3&gt;Libraries&lt;/h3&gt;


	&lt;p&gt;The program is supplied with &lt;a href="http://xml.apache.org/xerces2-j/index.html"&gt;Xerces&lt;/a&gt;, an &lt;span class="caps"&gt;XML&lt;/span&gt; parser and &lt;a href="http://xml.apache.org/xalan-j/index.html"&gt;Xalan&lt;/a&gt;, an &lt;span class="caps"&gt;XSLT&lt;/span&gt; processor.  The program accesses them through a standardised &lt;a href="http://java.sun.com/xml/jaxp/"&gt;&lt;span class="caps"&gt;JAXP&lt;/span&gt;&lt;/a&gt; interface, so they can probably be replaced with other &lt;span class="caps"&gt;JAXP&lt;/span&gt; compliant libraries.  Both of these programs were developed by the &lt;a href="http://xml.apache.org"&gt;Apache Software Foundation&lt;/a&gt;.  Another program from Apache, &lt;a href="http://jakarta.apache.org/ant/"&gt;Ant&lt;/a&gt; is used to build the project.&lt;/p&gt;


	&lt;h3&gt;Download&lt;/h3&gt;


	&lt;p&gt;The program is available for download as a &lt;a href="/docs/album-0.1.zip"&gt;.zip file&lt;/a&gt;, or a &lt;a href="/docs/album-0.1.tar.gz"&gt;.tar.gz file&lt;/a&gt;.  My code is released under the terms of the &lt;span class="caps"&gt;GPL&lt;/span&gt;, Xalan and Xerces are covered by the Apache Licence.  There is a sample Photo Album included.  This is still very much a work in progress, there is no documentation, few error messages, and some fairly bizarre &amp;#8216;features&amp;#8217;.  One such feature is that it pauses between compressing each image.  This is because my PC has a propensity for overheating&amp;#8230;&lt;/p&gt;


	&lt;h3&gt;Improvements&lt;/h3&gt;


	&lt;p&gt;I can only really see this program being useful for people who are already creating static pages using &lt;span class="caps"&gt;XSL&lt;/span&gt;.  Most people seem to be moving toward dynamic pages that apply style sheets &amp;#8216;on the fly&amp;#8217;, so this program is probably already out of date.  Each run of the program takes quite a long time.  It only creates the image files once, and doesn&amp;#8217;t overwrite them, however it creates all the &lt;span class="caps"&gt;HTML&lt;/span&gt; files every time.  A better way might be to have a &amp;#8216;build&amp;#8217; directory which stores all the image files, and a list of creation dates and names, and all the &lt;span class="caps"&gt;XML&lt;/span&gt; files prior to their conversion to &lt;span class="caps"&gt;XML&lt;/span&gt;.  This would make it less painful to play with different styles and layouts.&lt;/p&gt;


	&lt;p&gt;I think overall the best solution would have been to make an interactive program with a &lt;span class="caps"&gt;GUI&lt;/span&gt;.  However it would have a lot longer to write.  There are commercial websites that allow people to upload their photos, however I&amp;#8217;m not sure that they would give as much flexibility as this solution, especially in terms of the final layout.  With so much &amp;#8216;free&amp;#8217; web space available I think there may be a market for an interactive program.&lt;/p&gt;


	&lt;h3&gt;Updated (April 2007)&lt;/h3&gt;


	&lt;p&gt;I no longer use this program, instead I&amp;#8217;ve gone for a database backed dynamic site, created using Ruby on Rails.  It gives me more flexibility then the likes of Flickr, but at the cost of a lot more effort.&lt;/p&gt;</description>
      <pubDate>Fri, 13 Apr 2007 21:57:10 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2002-08-01:4      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
    <item>
      <title>XML to XHTML transformation</title>
      <link>http://www.matthewwest.co.uk/blog/2002/8/20/2-xml-to-xhtml-transformation</link>
      <description>&lt;p&gt;I created this &lt;span class="caps"&gt;XSL&lt;/span&gt; document for my old website to display various &lt;span class="caps"&gt;XML&lt;/span&gt; and &lt;span class="caps"&gt;XSL&lt;/span&gt; files that I had created.  It effectively adds markup to the document so that the various parts appear in different styles, governed by an external stylesheet.  I have stuck to just changing the colours.  The layout of the document is roughly preserved.  The &lt;code&gt;&amp;lt;?xml ?&amp;gt;&lt;/code&gt; line at the beginning is lost, as is the &lt;code&gt;DOCTYPE&lt;/code&gt; declaration.  Also lost are any text nodes outside the root element.  These are added in by the stylesheet.  The &lt;span class="caps"&gt;XSL1&lt;/span&gt; specification does not allow for the creation of &amp;#8216;identity&amp;#8217; templates, as all entites are resolved by the &lt;span class="caps"&gt;XML&lt;/span&gt; processor before they reach the &lt;span class="caps"&gt;XSL&lt;/span&gt; template.&lt;/p&gt;


	&lt;h3&gt;How It Works&lt;/h3&gt;


	&lt;p&gt;The initial template matches the document node.  It first looks for comments, using the &lt;code&gt;prolog&lt;/code&gt; mode comment template, which adds a newline after every comment.  Thus any comments at the bottom of the source will appear at the top.  It then selects either the root element, or any processing instructions.&lt;/p&gt;


	&lt;p&gt;The attributes are dealt with by the &lt;code&gt;match="@*"&lt;/code&gt; template and comments are dealt with by the &lt;code&gt;match="comment()"&lt;/code&gt;.  The &lt;code&gt;match="text()"&lt;/code&gt; sorts out all the text, and displays it all, including whitespace to ensure that the document is laid out as it is in the source.&lt;/p&gt;


	&lt;p&gt;The &lt;span class="caps"&gt;XSL&lt;/span&gt; document seems to manage OK with my documents, which are all laid out in a similar style, however I don&amp;#8217;t think it could cope with all documents.  The version used to create the old website differed only in that it can be called from other &lt;span class="caps"&gt;XSL&lt;/span&gt; sheets so that I can put a line into my &lt;span class="caps"&gt;HTML&lt;/span&gt; source such as &lt;code&gt;&amp;lt;xml2xhtml root="yes" href="cv2pdf.xsl" /&amp;gt;&lt;/code&gt; and the code will be inserted.&lt;/p&gt;


	&lt;h3&gt;The &lt;span class="caps"&gt;XSL&lt;/span&gt; File&lt;/h3&gt;


	&lt;p&gt;This is the file, having been processed by the &lt;a href="http://syntax.rubyforge.org/"&gt;Syntax&lt;/a&gt; Ruby Gem.  I don&amp;#8217;t use &lt;span class="caps"&gt;XSL&lt;/span&gt; on this website at all anymore.  You can &lt;a href="/docs/xml2xhtml.xsl"&gt;Download&lt;/a&gt; it.&lt;/p&gt;


&lt;pre class="xml"&gt;
&lt;span class="punct"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="tag"&gt;xml&lt;/span&gt; &lt;span class="attribute"&gt;version&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;1.0&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;encoding&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;iso-8859-1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;?&amp;gt;&lt;/span&gt;

&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;stylesheet&lt;/span&gt; &lt;span class="namespace"&gt;xmlns&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; 
                &lt;span class="namespace"&gt;xmlns&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;xalan&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://xml.apache.org/xslt&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
        &lt;span class="attribute"&gt;xmlns&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://www.w3.org/1999/xhtml&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
                &lt;span class="attribute"&gt;version&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;1.0&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;output&lt;/span&gt; &lt;span class="attribute"&gt;omit-xml-declaration&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;no&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
             &lt;span class="attribute"&gt;method&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;xml&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
             &lt;span class="attribute"&gt;doctype-public&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;-//W3C//DTD XHTML 1.0 Strict//EN&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
             &lt;span class="attribute"&gt;doctype-system&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
         &lt;span class="namespace"&gt;xalan&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;indent-amount&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
         &lt;span class="attribute"&gt;indent&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;no&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
             &lt;span class="attribute"&gt;encoding&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;iso-8859-1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;html&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;head&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;link&lt;/span&gt; &lt;span class="attribute"&gt;rel&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;stylesheet&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;href&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;convert.css&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;head&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;body&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;pre&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;prolog&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;* | processing-instruction()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;pre&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;body&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;html&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;showName&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;with-param&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;@*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;choose&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;when&lt;/span&gt; &lt;span class="attribute"&gt;test&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;node()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&amp;gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;apply-templates&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;/&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;showName&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;with-param&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;call-template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;when&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;otherwise&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;/&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;otherwise&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;choose&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&amp;gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;showName&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;param&lt;/span&gt; &lt;span class="attribute"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;choose&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;when&lt;/span&gt; &lt;span class="attribute"&gt;test&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;substring-before($name, ':')&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;namespace&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;substring-before($name, ':')&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;:&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;element&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;substring-after($name, ':')&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;when&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;otherwise&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;element&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;$name&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;otherwise&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;choose&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;       

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;processing-instruction()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;process&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;?&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;.&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;?&amp;gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;@*&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;attribute&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;name()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;=&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&amp;quot;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;.&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&amp;quot;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;text()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt; 
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;value-of&lt;/span&gt; &lt;span class="attribute"&gt;select&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;.&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; 
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;span class="comment"&gt;&amp;lt;!--&amp;lt;/xsl:text&amp;gt;
   &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;
   &amp;lt;xsl:text&amp;gt;--&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt; &lt;span class="attribute"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment()&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="attribute"&gt;mode&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;prolog&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="attribute"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
   &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;span class="comment"&gt;&amp;lt;!--&amp;lt;/xsl:text&amp;gt;
   &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;
   &amp;lt;xsl:text&amp;gt;--&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;template&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;xsl&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;stylesheet&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;</description>
      <pubDate>Fri, 13 Apr 2007 21:31:55 GMT</pubDate>
      <guid isPermaLink="false">
tag:matthewwest.co.uk,2002-08-20:2      </guid>
      <author>spam@matthewwest.co.uk(Matthew West)</author>
    </item>
  </channel>
</rss>
