Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > Search XML Node

Reply
Thread Tools

Search XML Node

 
 
thomas
Guest
Posts: n/a
 
      05-03-2005
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. At the moment my XSL page only returns a result if the exact string is
entered i.e I have to enter 'baker street' or 'gerry rafferty' in order to
get a result. I would appriciate it if anyone could tell me how to modify
the code below so that if I enter 'baker' or 'gerry' I would get a result.

Heres my XSL page

<?xml version="1.0"?>

<xsl:stylesheet
version="1.0"
xmlnssl="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">
<xsl:if test="./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:if>
</xsl:for-each>

<xsl:for-each select="cat/links">
<xsl:if test="./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:if>
</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>
<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>
<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>
<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>
<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>



 
Reply With Quote
 
 
 
 
David Carlisle
Guest
Posts: n/a
 
      05-03-2005

You could change
<xsl:if test="./artist = $text1">

to

<xsl:if test="contains(artist ,$text1)">

Note you never need to start an XPath with ./ also you don't really need
an xsl:if here

<xsl:for-each select="cat/links">
<xsl:if test="./artist = $text1">

can be written


<xsl:for-each select="cat/links[artist = $text1]">

which is often preferable as it means for example that position() just
numbers the nodes that you actually want to output, useful for
numbering, or making alternating couloured rows in tables etc.


David
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Reading XML Node-by-Node Martin Honnen ASP .Net 0 11-12-2008 06:29 PM
xsl variable $node/text() but $node can non-node-set help! Tjerk Wolterink XML 2 08-24-2006 03:28 AM
how to creating new node inside a xml node Geagleeye ASP General 2 08-03-2006 12:09 PM
How to set the node indent property between the parent node and the leaf node viveknatani@gmail.com ASP .Net 0 02-13-2006 07:11 PM
search an XML node for a string Thomas Patton XML 0 08-11-2004 03:06 AM



Advertisments