I'm building a guitar website which uses XML and XSLT.
http://www.madtim67.com/guitar/index.html You can search either by artist or
song. I used the <xsl:if test="contains( artist ,$text1)"> line which worked
OK except now I get some duplicate output (go to the website and enter 'a'
to see what I mean. I included a unique id node in my xml file to make every
record unique. Is there a way that I can check the output the unique id
field only once.
Heres my XSL page
<?xml version="1.0"?>
<xsl:styleshe et
version="1.0"
xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="text1" />
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet " type="text/css" href="mystyle.c ss" />
<title>Result s</title>
</head>
<body>
<table class="three" align="center">
<col width="35%"/>
<col width="35%"/>
<col width="15%"/>
<col width="15%"/>
<tr>
<th class="head">Ar tist</th>
<th class="head">So ng</th>
<th class="head">Ch ord</th>
<th class="head">Mi di</th>
</tr>
<xsl:for-each select="cat/links[contains(artist ,$text1)]">
<tr>
<td><xsl:appl y-templates select="./artist"/></td>
<td><xsl:appl y-templates select="./song"/></td>
<xsl:variable name="link1"><x sl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank" >view</a></td>
<xsl:variable name="link2"><x sl:apply-templates
select="./midi"/></xsl:variable>
<td><a href="{$link2}" target="_blank" >play</a></td>
</tr>
</xsl:for-each>
<xsl:for-each select="cat/links[contains(song,$ text1)]">
<tr>
<td><xsl:appl y-templates select="./artist"/></td>
<td><xsl:appl y-templates select="./song"/></td>
<xsl:variable name="link1"><x sl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank" >view</a></td>
<xsl:variable name="link2"><x sl:apply-templates
select="./midi"/></xsl:variable>
<td><a href="{$link2}" target="_blank" >play</a></td>
</tr>
</xsl:for-each>
</table>
<div align="center">
<a href="javascrip t:history.go(-1)">Click here to return to search page</a>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Heres my XML file
<cat>
<links>
<id>00001</id>
<artist>gerry rafferty</artist>
<song>baker street</song>
<chord>media/gerry_rafferty_-_baker_street.t xt</chord>
<midi>media/gerry_rafferty_-_baker_street.m id</midi>
</links>
<links>
<id>00002</id>
<artist>men at work</artist>
<song>down under</song>
<chord>media/men_at_work_-_down_under.txt </chord>
<midi>media/men_at_work_-_down_under.mid </midi>
</links>
<links>
<id>00003</id>
<artist>squeeze </artist>
<song>up the junction</song>
<chord>media/squeeze_-_up_the_junctio n.txt</chord>
<midi>media/squeeze_-_up_the_junctio n.mid</midi>
</links>
<links>
<id>00004</id>
<artist>steve harley</artist>
<song>make me smile</song>
<chord>media/steve_harley_-_make_me_smile. txt</chord>
<midi>media/steve_harley_-_make_me_smile. mid</midi>
</links>
</cat>
http://www.madtim67.com/guitar/index.html You can search either by artist or
song. I used the <xsl:if test="contains( artist ,$text1)"> line which worked
OK except now I get some duplicate output (go to the website and enter 'a'
to see what I mean. I included a unique id node in my xml file to make every
record unique. Is there a way that I can check the output the unique id
field only once.
Heres my XSL page
<?xml version="1.0"?>
<xsl:styleshe et
version="1.0"
xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="text1" />
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet " type="text/css" href="mystyle.c ss" />
<title>Result s</title>
</head>
<body>
<table class="three" align="center">
<col width="35%"/>
<col width="35%"/>
<col width="15%"/>
<col width="15%"/>
<tr>
<th class="head">Ar tist</th>
<th class="head">So ng</th>
<th class="head">Ch ord</th>
<th class="head">Mi di</th>
</tr>
<xsl:for-each select="cat/links[contains(artist ,$text1)]">
<tr>
<td><xsl:appl y-templates select="./artist"/></td>
<td><xsl:appl y-templates select="./song"/></td>
<xsl:variable name="link1"><x sl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank" >view</a></td>
<xsl:variable name="link2"><x sl:apply-templates
select="./midi"/></xsl:variable>
<td><a href="{$link2}" target="_blank" >play</a></td>
</tr>
</xsl:for-each>
<xsl:for-each select="cat/links[contains(song,$ text1)]">
<tr>
<td><xsl:appl y-templates select="./artist"/></td>
<td><xsl:appl y-templates select="./song"/></td>
<xsl:variable name="link1"><x sl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank" >view</a></td>
<xsl:variable name="link2"><x sl:apply-templates
select="./midi"/></xsl:variable>
<td><a href="{$link2}" target="_blank" >play</a></td>
</tr>
</xsl:for-each>
</table>
<div align="center">
<a href="javascrip t:history.go(-1)">Click here to return to search page</a>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Heres my XML file
<cat>
<links>
<id>00001</id>
<artist>gerry rafferty</artist>
<song>baker street</song>
<chord>media/gerry_rafferty_-_baker_street.t xt</chord>
<midi>media/gerry_rafferty_-_baker_street.m id</midi>
</links>
<links>
<id>00002</id>
<artist>men at work</artist>
<song>down under</song>
<chord>media/men_at_work_-_down_under.txt </chord>
<midi>media/men_at_work_-_down_under.mid </midi>
</links>
<links>
<id>00003</id>
<artist>squeeze </artist>
<song>up the junction</song>
<chord>media/squeeze_-_up_the_junctio n.txt</chord>
<midi>media/squeeze_-_up_the_junctio n.mid</midi>
</links>
<links>
<id>00004</id>
<artist>steve harley</artist>
<song>make me smile</song>
<chord>media/steve_harley_-_make_me_smile. txt</chord>
<midi>media/steve_harley_-_make_me_smile. mid</midi>
</links>
</cat>
Comment