Re: [xsl] How to create a link with the value of node-set

Subject: Re: [xsl] How to create a link with the value of node-set
From: "Joris Gillis" <roac@xxxxxxxxxx>
Date: Thu, 15 Sep 2005 10:57:06 +0200

Tempore 10:43:10, die 09/15/2005 AD, hinc in xsl-list@xxxxxxxxxxxxxxxxxxxxxx scripsit Ana Gaspar MartC-nez <annagaspar@xxxxxxxxx>:

I wish to generate an url  from the value of one atrribute of the xml
file. I've to transform this value to parse from the .xml to .html. I
attemp that using the follow sentences:
<xsl:variable name= link>
<xsl:value-of select="concat(substring-first(var1,'.'),'.html')"/>
where var1=fichero.xml
<a href="<xsl:value-of select="link"/> link1 </a>

Your code is indeed not well-formed nor valid. Firstly, remember that XSLT is based on XML. Each and every XSL document must be well-formed XML. All attribute values must be surrounded by quotes.

Furthermore, your code has two small error in Xpath expressions ('substring-first' must be 'substring-before' and when calling a variable, its name must be preceded by a dollar sign) and one major conceptual error:
You cannot possibly nest elements inside an attribute.
You can go two two ways to solve this:

#1 Use an Attribute Value Template (AVT):
	<a href="{$link}"> link1 </a>

#2 Use 'xsl:attribute':
	<xsl:attribute name="href">
		<xsl:value-of select="$link"/>
	<xsl:text> link1 </xsl:text>

I guess #1 is the easiest, so on the whole, your corrected code now looks like this:

<xsl:variable name="var1">fichero.xml</xsl:variable>

<xsl:variable name="link">
	<xsl:value-of select="concat(substring-before($var1,'.'),'.html')"/>

<a href="{$link}"> link1 </a>

regards, -- Joris Gillis ( Fiat W3C in tenebris

Current Thread