XML to Tree via XSLT : an XSLT script to convert an XML file into a Tree web page

Download xml2tree.zip

Synopsis:

links.xsl
links.xml


links.xsl

Synopsis
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="html"/>
	<xsl:template match="/">
		<html>
			<head>
				<script language="JavaScript"><![CDATA[
					function expand(divid)
					{
				  eval("closed_"+divid).style.display = 'none';
					eval("open_"+divid).style.display = '';
				}
					function collapse(divid)
					{
					  eval("open_"+divid).style.display = 'none';
					  eval("closed_"+divid).style.display = '';
					}
]]>		</script>
				<style>
					.clsEntryText {padding-top: 2px; font-family: verdana; color: black; font-size: 11; font-weight: 400; background-color:#C7D2DE;}
				</style>
			</head>
			<body style="background-color:#C7D2DE;">
				<table width="100%" cellspacing="5">
					<tr>
						<td nowrap="yes">
							<xsl:apply-templates select="links"/>
						</td>
					</tr>
				</table>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="links">
		<div class="clsEntryText" style="padding-left:5px" id="open_{generate-id()}">
			<img src="open.gif"/>&#160;
  	  <xsl:value-of select="description"/>
			<xsl:apply-templates select="link"/>
		</div>
	</xsl:template>

	<xsl:template match="link">
		<xsl:variable name="currid" select="generate-id()"/>
		<xsl:choose>
			<xsl:when test="children">
				<xsl:variable name="childcnt" select="count(.//link)"/>
		
				<div class="clsEntryText"   id="closed_{$currid}">
				  <xsl:call-template name="doVerticalLine" />
					<img src="folder_plus.gif" style="cursor:hand" onClick="expand('{$currid}')" />
					<img src="closed.gif"/>&#160;
				  <xsl:call-template name="doChildrenRow"><xsl:with-param name="childcnt" select="$childcnt"/></xsl:call-template>
				</div>
		
				<div class="clsEntryText"  style="display:none" id="open_{$currid}" >
				  <xsl:call-template name="doVerticalLine" />
					<img  src="folder_minus.gif" style="cursor:hand" onClick="collapse('{$currid}')" />
					<img src="open.gif"/>&#160;
				  <xsl:call-template name="doChildrenRow"><xsl:with-param name="childcnt" select="$childcnt"/></xsl:call-template>
					<xsl:apply-templates select="children"/>
				</div>
			</xsl:when>
			
			<xsl:otherwise>
				<div class="clsEntryText">
  			  <xsl:call-template name="doVerticalLine" />
					<img  src="divider.gif"/>
					<img src="item.gif"/>&#160;
		  	  <xsl:call-template name="doHref" />
				</div>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
		<xsl:template name="doVerticalLine">
		<xsl:for-each select="ancestor::link">
			<xsl:choose>
				<xsl:when test="count(following-sibling::link) > 0">
					<img src="line.gif"/>
				</xsl:when>
				<xsl:otherwise>
					<img src="nothing.gif"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each>
	</xsl:template>

	<xsl:template name="doHref">
		<a href="http://{addr}">
		  <xsl:if test="description = ''">
				  <xsl:value-of select="addr"/>
		  </xsl:if>
		  <xsl:if test="description != ''">
				  <xsl:value-of select="description"/>
		  </xsl:if>
		</a>
	</xsl:template>

	<xsl:template name="doChildrenRow">
      <xsl:param name="childcnt" />
  	  <xsl:value-of select="description"/>
			(<xsl:value-of select="$childcnt"/> link<xsl:if test="$childcnt != 1">s</xsl:if>)
	</xsl:template>

</xsl:stylesheet>

links.xml

Synopsis
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='links.xsl'?>

<links>
  <description>Interesting links</description>
  <link>
    <description>Search</description>
    <children>
      <link>
        <category>Search</category>
        <addr>www.whitepages.com/</addr>
        <description />
      </link>
    </children>
  </link>
  <link>
    <description>Movers</description>
    <children>
      <link>
        <category>Movers</category>
        <addr>www.ozark-auto.com</addr>
        <description>car movers</description>
      </link>
    </children>
  </link>
  <link>
    <description>Mind Maps</description>
    <children>
      <link>
        <category>Mind Maps</category>
        <addr>www.aportis.com/products/BrainForest/benefits.html</addr>
        <description>software</description>
      </link>
      <link>
        <category>Mind Maps</category>
        <addr>www.store-mindjet.com/index.cfm?category=2</addr>
        <description>software</description>
      </link>
    </children>
  </link>
  <link>
    <description>Misc.</description>
    <children>
      <link>
        <category>Misc.</category>
        <addr>www.bwgen.com/doload.htm</addr>
        <description>Brain wave generator</description>
      </link>
      <link>
        <category>Misc</category>
        <addr>babel.altavista.com/translate.dyn</addr>
        <description>Translate languages to/from English</description>
      </link>
    </children>
  </link>
  <link>
    <description>unknown</description>
    <children>
      <link>
        <category>unknown</category>
        <addr>www.castsoftware.com</addr>
        <description />
      </link>
    </children>
  </link>
  <link>
    <description>Build</description>
    <children>
      <link>
        <category>IDE</category>
        <addr>eclipse-plugins.2y.net/</addr>
        <description>ecplise plug ins</description>
      </link>
      <link>
        <category>BUILD</category>
        <addr>cruisecontrol.sourceforge.net/</addr>
        <description>Cruise Control automates Ant Builds</description>
      </link>
      <link>
        <category>Development</category>
        <addr>www.usenix.org/events/usenix-win2000/invitedtalks/lucovsky_html/</addr>
        <description>slide show of of NT development.</description>
      </link>
      <link>
        <description>Ant</description>
        <children>
          <link>
            <category>Ant</category>
            <addr>www.oroinc.com</addr>
            <description />
          </link>
          <link>
            <category>Ant</category>
            <addr>cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/ant_in_anger.html?rev=1.3.2.1</addr>
            <description>Ant build system</description>
          </link>
        </children>
      </link>
      <link>
        <category>Compilers</category>
        <addr>agnes.dida.physik.uni-essen.de/~janjaap/mingw32/download.html</addr>
        <description>GCC compiler and all remaining utilities</description>
      </link>
    </children>
  </link>
  <link>
    <description>Software</description>
    <children>
      <link>
        <description>Freeware</description>
        <children>
          <link>
            <category>Freeware</category>
            <addr>www.papaw.com/index.cgi/Computers/Software/File_Management/File_Comparison/Windows/</addr>
            <description>File comparison</description>
          </link>
          <link>
            <category>Freeware</category>
            <addr>www.objectmentor.com/resources/downloads/index</addr>
            <description>FSM generator</description>
          </link>
        </children>
      </link>
      <link>
        <description>Utilities</description>
        <children>
          <link>
            <category>Utilities</category>
            <addr>www.epsilonsquared.com/</addr>
            <description>installation monitor and replicator</description>
          </link>
          <link>
            <category>Utilities</category>
            <addr>www.p-nand-q.com/tools/regdiff.htm</addr>
            <description>registry difference</description>
          </link>
        </children>
      </link>
    </children>
  </link>
  <link>
    <description>Fields</description>
    <children>
      <link>
        <description>Wiki</description>
        <children>
          <link>
            <category>Wiki</category>
            <addr>c2.com/cgi/wiki?QwikWiki</addr>
            <description />
          </link>
          <link>
            <category>Wiki</category>
            <addr>c2.com/cgi/wiki?DevWiki</addr>
            <description />
          </link>
        </children>
      </link>
      <link>
        <description>AI</description>
        <children>
          <link>
            <description>Fuzzy Cognitive Maps</description>
            <children>
              <link>
                <category>AI</category>
                <addr>www.erudit.de/erudit/CaseStudies/casest_pdf/alarm_managem.pdf</addr>
                <description>FCM: Fuzzy cognitive maps</description>
              </link>
            </children>
          </link>
          <link>
            <description>Neural Networks</description>
            <children>
              <link>
                <category>Neural Networks</category>
                <addr>www.informatik.uni-freiburg.de/~heinz/FAQ4.html</addr>
                <description>links to freeware and books.</description>
              </link>
              <link>
                <category>Neural Networks</category>
                <addr>www.ensmp.fr/~moutarde/FAQs/Neuron-faq/FAQ5.html#A_source</addr>
                <description>links to source code.</description>
              </link>
              <link>
                <category>Neural Networks</category>
                <addr>www.emsl.pnl.gov:2080/proj/neuron/neural/systems/shareware.html</addr>
                <description>links to freeware and utilities, e source code as well</description>
              </link>
            </children>
          </link>
          <link>
            <description>SOM</description>
            <children>
              <link>
                <category>SOM</category>
                <addr>www.canis.uiuc.edu/~dpape/dli/summary.html</addr>
                <description>brief description of SOMs</description>
              </link>
              <link>
                <category>SOM</category>
                <addr>www.aist.go.jp/NIBH/~b0616/Lab/B1</addr>
                <description>Sample SOM as a Java applet</description>
              </link>
              <link>
                <category>SOM</category>
                <addr>www.eastgate.com/squirrel/Farms.html#MarksFarm</addr>
                <description>type of SOM used for data mining</description>
              </link>
            </children>
          </link>
        </children>
      </link>
      <link>
        <description>Languages</description>
        <children>
          <link>
            <category>LANGUAGES</category>
            <addr>cui.unige.ch/db-research/Enseignement/analyseinfo/BNFweb.html</addr>
            <description>BNF for Java, Sql, Ada, etc...</description>
          </link>
          <link>
            <category>LANGUAGES</category>
            <addr>cui.unige.ch/db-research/Enseignement/analyseinfo/JAVA/AJAVA.html</addr>
            <description>BNF for Java</description>
          </link>
        </children>
      </link>
      <link>
        <description>Graphics</description>
        <children>
          <link>
            <category>GRAPHICS</category>
            <addr>chortle.ccsu.ctstateu.edu/vectorLessons/tutorialIndex.html</addr>
            <description>vector arithmetic</description>
          </link>
          <link>
            <category>Graphics</category>
            <addr>graphics.stanford.edu/papers/h3</addr>
            <description>lays out a graph in 3D</description>
          </link>
        </children>
      </link>
    </children>
  </link>
  <link>
    <description>Development</description>
    <children>
      <link>
        <description>C#</description>
        <children>
          <link>
            <category>CSharp</category>
            <addr>msdn.microsoft.com/msdnmag/issues/01/11/NetProf/NetProf.asp</addr>
            <description>profiling</description>
          </link>
        </children>
      </link>
      <link>
        <description>Perl</description>
        <children>
          <link>
            <category>Perl</category>
            <addr>www.sysadminmag.com/tpj/</addr>
            <description />
          </link>
        </children>
      </link>
      <link>
        <description>C++</description>
        <children>
          <link>
            <category>.NET</category>
            <addr>msdn.microsoft.com/msdnmag/issues/01/08/bugslayer/bugslayer0108.asp</addr>
            <description>C++ tricks</description>
          </link>
        </children>
      </link>
      <link>
        <description>VB</description>
        <children>
          <link>
            <category>VB</category>
            <addr>www.mztools.com/</addr>
            <description>VB IDE add-in</description>
          </link>
          <link>
            <category>VB</category>
            <addr>huizen.dds.nl/~w-p/download.htm</addr>
            <description>software metrics for VB</description>
          </link>
        </children>
      </link>
      <link>
        <description>Java</description>
        <children>
          <link>
            <category>Java</category>
            <addr>www.preemptive.com/</addr>
            <description>Dash-O(optimizer for Java)</description>
          </link>
          <link>
            <category>Java</category>
            <addr>www.meurrens.org/ip-Links/java/regex/</addr>
            <description />
          </link>
          <link>
            <category>Java</category>
            <addr>herrykoh.topcities.com/projects/index.html</addr>
            <description>Replace() with regexp</description>
          </link>
          <link>
            <category>Java</category>
            <addr>www.tools4java.com/jstyle.html</addr>
            <description>Java automatic code review</description>
          </link>
          <link>
            <category>Java</category>
            <addr>jester.sourceforge.net</addr>
            <description>Detects Zombie and Dead code</description>
          </link>
          <link>
            <category>Java</category>
            <addr>www.refactorit.com/index.html?id=474</addr>
            <description>Detects Zombie and Dead code</description>
          </link>
        </children>
      </link>
      <link>
        <description>Web</description>
        <children>
          <link>
            <category>WEB</category>
            <addr>crit.org/http://crit.org/index.html</addr>
            <description>Web page annotations</description>
          </link>
          <link>
            <category>Web</category>
            <addr>support.microsoft.com/default.aspx?scid=kb;EN-US;Q179230</addr>
            <description>attaching to an IE process</description>
          </link>
          <link>
            <category>WEB</category>
            <addr>faq.clever.net/htaccess.htm</addr>
            <description>HTACCESS documentation</description>
          </link>
          <link>
            <category>WEB</category>
            <addr>ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types</addr>
            <description>media types ("text/xml", etc.)</description>
          </link>
        </children>
      </link>
      <link>
        <description>NT</description>
        <children>
          <link>
            <category>NT</category>
            <addr>www.wdj.com/articles/2000/0005/0005c/0005c.htm?topic=articles</addr>
            <description>Article on multithreaded memory management with C++ under NT4.0</description>
          </link>
          <link>
            <category>NT</category>
            <addr>www.firedaemon.com/</addr>
            <description>Service wrapper</description>
          </link>
        </children>
      </link>
      <link>
        <description>OOP</description>
        <children>
          <link>
            <category>OOP</category>
            <addr>ootips.org/ood-principles.html</addr>
            <description />
          </link>
        </children>
      </link>
      <link>
        <category>XP</category>
        <addr>c2.com/cgi/wiki?ExtremeProgrammingForOne</addr>
        <description />
      </link>
    </children>
  </link>
  <link>
    <description>Computers And Administration</description>
    <children>
      <link>
        <category>Hardware</category>
        <addr>www.southwest.com.au/~jfuller/webcam/webcam.htm</addr>
        <description>web cam runs under win2K</description>
      </link>
      <link>
        <category>WIN</category>
        <addr>fox2k.net/2ktweaks/explorer_tweaks.htm</addr>
        <description>Win2k Tweaks and Tips</description>
      </link>
    </children>
  </link>
</links>






Contact me about content on this page using john_web-at-arrizza-dot-com
For Web Master or site problems contact: webadmin-at-arrizza-dot-com
Copyright John Arrizza (c) 2001,2002,2003,2004,2005,2006,2007