T
thomas
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:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="html"/>
<xslaram name="text1" />
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
<title>Results</title>
</head>
<body>
<table class="three" align="center">
<col width="35%"/>
<col width="35%"/>
<col width="15%"/>
<col width="15%"/>
<tr>
<th class="head">Artist</th>
<th class="head">Song</th>
<th class="head">Chord</th>
<th class="head">Midi</th>
</tr>
<xsl:for-each select="cat/links[contains(artist,$text1)]">
<tr>
<td><xsl:apply-templates select="./artist"/></td>
<td><xsl:apply-templates select="./song"/></td>
<xsl:variable name="link1"><xsl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank">view</a></td>
<xsl:variable name="link2"><xsl: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:apply-templates select="./artist"/></td>
<td><xsl:apply-templates select="./song"/></td>
<xsl:variable name="link1"><xsl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank">view</a></td>
<xsl:variable name="link2"><xsl: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="javascript: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.txt</chord>
<midi>media/gerry_rafferty_-_baker_street.mid</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_junction.txt</chord>
<midi>media/squeeze_-_up_the_junction.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:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="html"/>
<xslaram name="text1" />
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
<title>Results</title>
</head>
<body>
<table class="three" align="center">
<col width="35%"/>
<col width="35%"/>
<col width="15%"/>
<col width="15%"/>
<tr>
<th class="head">Artist</th>
<th class="head">Song</th>
<th class="head">Chord</th>
<th class="head">Midi</th>
</tr>
<xsl:for-each select="cat/links[contains(artist,$text1)]">
<tr>
<td><xsl:apply-templates select="./artist"/></td>
<td><xsl:apply-templates select="./song"/></td>
<xsl:variable name="link1"><xsl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank">view</a></td>
<xsl:variable name="link2"><xsl: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:apply-templates select="./artist"/></td>
<td><xsl:apply-templates select="./song"/></td>
<xsl:variable name="link1"><xsl:apply-templates
select="./chord"/></xsl:variable>
<td><a href="{$link1}" target="_blank">view</a></td>
<xsl:variable name="link2"><xsl: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="javascript: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.txt</chord>
<midi>media/gerry_rafferty_-_baker_street.mid</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_junction.txt</chord>
<midi>media/squeeze_-_up_the_junction.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>