Tempore 21:48:58, die 01/25/2005 AD, hinc in
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com scripsit Chaitanya Desai
<cdesai(_at_)syncata(_dot_)com>:
OK,
This is the recursive stylesheet I have, to handle a generic XML.
How does the thing you explained with the 'e' fit here.
This is an example of how it could be used;
<xsl:template match="*">
<xsl:variable name="sortkey">
<xsl:for-each select="*">
<e>
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:value-of select="name()"/>
</xsl:for-each>
</e>
</xsl:for-each>
</xsl:variable>
<xsl:copy>
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:apply-templates>
<!-- the select for this sort needs to be the concatenated name-value
pairs of
all the attributes sorted in alphabetical order -->
<xsl:sort
select="xx:node-set($sortkey)//e[position()=count(current()/preceding-sibling::*)]"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
It will convert an input like this:
<root>
<e b="bb" y="yy">
<node x="123" a="123"/>
<node x="999" a="999" b="999"/>
</e>
<e z="zz" a="aa"/>
</root>
to this:
<root>
<e a="aa" z="zz"/>
<e b="bb" y="yy">
<node a="999" b="999" x="999"/>
<node a="123" x="123"/>
</e>
</root>
For each element in the source doument, it creates a table of the
attributes of all child elements and uses this table (stored in the
'sortkey' variable) to perform the sort.
e.g. when the 'root' element is matched, the 'sortkey' variable contains:
<e>by</e>
<e>az</e>
because these entries follow the document order, you can use them as
sortkey for the child elements by matching the position:
xx:node-set($sortkey)//e[position()=count(current()/preceding-sibling::*)]
(please keep in mind that this is an XSLT1.0 solution. The XSLT2.0
solutions of Michael Kay and Dimitre Novatchev are of course better if
your XSLT processor can handle them)
regards,
--
Joris Gillis (http://www.ticalc.org/cgi-bin/acct-view.cgi?userid=38041)
"Φιλήκοον ειναι μαλλον η φιλόλαλον" -
Κλεόβουλος
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--