This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: changing the order of xml elements when doing XSLT


When you call <xsl:apply-templates/> in your <xsl:template match="record">
template, the child elements for "record" are processed in the document
order, irrespective of the order of those matching template declarations. To
have the order you want, you should simple do:

<xsl:template match="record">
   <newrecord>
      <xsl:apply-templates select="c"/>
	<xsl:apply-templates select="b"/>
	<xsl:apply-templates select="a"/>
   </newrecord>
</xsl:template>

or

<xsl:template match="record">
   <newrecord>
      <xsl:apply-templates >
		<xsl:sort select="name()" order="descending" />
	</xsl:apply-templates>
   </newrecord>
</xsl:template>


-----Original Message-----
From: owner-xsl-list@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Charlie Wu
Sent: Wednesday, April 18, 2001 8:41 PM
To: XSL-List@lists.mulberrytech.com
Subject: [xsl] changing the order of xml elements when doing XSLT


hi all..

i have a need to accomplish the following.. i.e. when doing an XSLT over an
XML file.. have the output xml be in a specific order that is NOT the same
as the order in the original XML. i guess it can only be done in the xsl
file somehow.. if at all possible.. but i couldn't figure it out.

to clarify what i mean.. here's an example:

source.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="mapper.xsl"?>
<record>
<a>1</a>
<b>2</b>
<c>3</c>
</record>

mapper.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="xml" omit-xml-declaration="yes" indent="no"/>
        <xsl:template match="/">
                <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match="record">
	       	<newrecord><xsl:apply-templates/></newrecord>
	</xsl:template>
	<xsl:template match="c">
		<CC>
			<xsl:value-of select="."/>
		</CC>
	</xsl:template>
	<xsl:template match="a">
		<AA><xsl:value-of select="."/></AA>
	</xsl:template>
	<xsl:template match="b">
			<BB>
			<xsl:value-of select="."/>
		</BB>
	</xsl:template>
</xsl:stylesheet>

current output:

<newrecord
xmlns:fo="http://www.w3.org/1999/XSL/Format";><AA>1</AA><BB>2</BB><CC>3</CC><
/newrecord>

desired output:

<newrecord
xmlns:fo="http://www.w3.org/1999/XSL/Format";><CC>3</CC><BB>2</BB><AA>1</AA><
/newrecord>

any ideas would be highly appreciated..

thanks!

Charlie


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]