This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Three questions on sorting..
- To: xsl-list at lists dot mulberrytech dot com
- Subject: [xsl] Three questions on sorting..
- From: "Tim" <xsl at cheekymail dot net>
- Date: 20 Jun 2001 09:57:59 -0000
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi,
XML/XSL is below. These problems are causing a very red forehead
(since I keep banging it on the table in confusion!)
1. Why does the <xsl:sort/> cause a "tr is not allowed in this position
in the stylesheet" error? If I take the sorting tags out, it is quite
happy.
2. Can the <xsl:sort/> use a variable directly? e.g. <xsl:sort
select="$orderBy"><xsl:sort> I'll try it myself when I can get the
answer to question 1!
3. I would like to sort by manufacturer name but it is in an external
file. Is there a way of ordering by the <name/> of the manufacture? I
can order by the manufacturer ID but not the external name. Xpointer?
Thanks for your time,
Tim.
_______________________
Cars.xml
<cars>
<car ID="car1">
<model>
88 Type 2a SWB
</model>
<price>
1200
</price>
<manufacturer>
manufacturer2
</manufacturer>
</car>
<car ID="car2">
<model>
Mundaino
</model>
<price>
4500
</price>
<manufacturer>
manufacturer1
</manufacturer>
</car>
</cars>
_______________________
manufacturers.xml
<manufacturers>
<manufacturer ID="manufacturer1">
<name>
Ford
</name>
<notes>
Ford Motor Company
</notes>
</manufacturer>
<manufacturer ID="manufacturer2">
<name>
Land Rover
</name>
<notes>
Good solid, slow cars. Not good for motor way driving but will
pull the side off a house if necessary.
</notes>
</manufacturer>
</manufacturers>
_______________________
cars.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html"/>
<xsl:variable name="col" select="document
('http://localhost/xml/manufacturers.xml')"/>
<xsl:template match="/">
<xsl:apply-templates select="/cars"/>
</xsl:template>
<xsl:template match="cars">
<table>
<tr>
<td>
<a>
<xsl:attribute
name="href"><xsl:value-of
select="$targetURL"/>manufacturer</xsl:attribute>
Manufacturer
</a>
</td>
<td>
<a>
<xsl:attribute
name="href"><xsl:value-of select="$targetURL"/>model</xsl:attribute>
Model
</a>
</td>
<td>
<a>
<xsl:attribute
name="href"><xsl:value-of select="$targetURL"/>price</xsl:attribute>
Price
</a>
</td>
</tr>
<xsl:for-each select="car">
<xsl:sort select="model">
<tr>
<td>
<xsl:variable name="cat_id"> <xsl:value-of select="normalize-
space(manufacturer)"/></xsl:variable>
<xsl:value-of
select="$col/manufacturers/manufacturer[@ID=$cat_id]/name/text()"/>
</td>
<td>
<xsl:value-of select="normalize-space(model)"/>
</td>
<td>
<xsl:value-of select="normalize-space(price)"/>
</td>
</tr>
</xsl:sort>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list