[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Newbie question on XSL transformations: multiple

Subject: Re: Newbie question on XSL transformations: multiple sorts on element attributes
From: Rob Newman <rlnewman@xxxxxxxx>
Date: Tue, 6 Feb 2007 13:19:25 -0800
Re:  Newbie question on XSL transformations: multiple
Abel and others,

Thanks so much for the prompt response and help! I really appreciate it.
You are correct that my syntax was incorrect. Unfortunately the solution you gave me also seg faults.
The XSLT processor I am using is xsltproc (from the command line). It does not give me any useful error output aside from "Segmentation fault'. Would you recommend using a different processor?


{hostname} 273%> xsltproc -v -o output.xml transform.xsl input.xml
creating dictionary for stylesheet
reusing dictionary from transform.xsl for stylesheet
Added namespace: xsl mapped to http://www.w3.org/1999/XSL/Transform
Segmentation fault
{hostname} 274%>

-- START SNIPPET --
<xsl:template match="dataloggerlist">
<xsl:element name="dataloggerlist">
<xsl:apply-templates select="datalogger">
<xsl:sort select="param/@id{dlt}" data-type="number" order="descending" />
<xsl:sort select="@name" order="ascending" />
</xsl:apply-templates>
</xsl:element>
</xsl:template>
-- END SNIPPET --
(Note: the datalogger template outputs the data same as before)

This is very strange, as it cannot possibly run, you have a syntax error in your select clause (if you did manage to get it running, can you follow-up with the processor you are using?). The following is in error:


<xsl:sort select="param/@id{dlt}" data-type="number" order="descending" />

Change it to:

<xsl:sort select="param[@id = 'dlt']" />

and all elements with @id = 'dlt' (i.e., attribute nodes containing the exact match to the text 'dlt') will be output firstly.

Here is the relevant part of the file (changed as per your instruction):


-- START SNIPPET --
<xsl:template match="dataloggerlist">
	<xsl:element name="dataloggerlist">
		<xsl:apply-templates select="datalogger">
			<xsl:sort select="param[@id = 'dlt']" />
		</xsl:apply-templates>
	</xsl:element>
</xsl:template>
-- END SNIPPET --

I would prefer to do this whole process in one step, and avoid having two XSL files that create an interim XML file that just gets transformed again.

and you are right, you won't need to.

Can you please give me an example of how to do this in one file? As I see it, I have to get the XML structure tight with my first transformation before I can apply the sorting rules. In the meantime I will keep tinkering.....


Thanks again,
- Rob

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.