http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/Sort&feed=atom&action=history
XML Tutorial/XSLT stylesheet/Sort - История изменений
2024-03-29T14:26:23Z
История изменений этой страницы в вики
MediaWiki 1.30.0
http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/Sort&diff=10881&oldid=prev
Admin: 1 версия
2010-05-26T08:27:00Z
<p>1 версия</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<tr style="vertical-align: top;" lang="ru">
<td colspan="1" style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan="1" style="background-color: white; color:black; text-align: center;">Версия 08:27, 26 мая 2010</td>
</tr><tr><td colspan="2" style="text-align: center;" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>
Admin
http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/Sort&diff=10880&oldid=prev
в 18:22, 25 мая 2010
2010-05-25T18:22:32Z
<p></p>
<p><b>Новая страница</b></p><div>== sort by attribute: sort select="@joined" data-type="number" order="descending"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?><br />
<member><br />
<state joined="1995">Austria</state><br />
<state joined="1950">Belgium</state><br />
<state joined="1973">Denmark</state><br />
<state joined="1986">Portugal</state><br />
<state joined="1986">Spain</state><br />
<state joined="1995">Sweden</state><br />
<state joined="1973">United Kingdom</state><br />
</member><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" indent="yes" /><br />
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" /><br />
<xsl:output<br />
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" /><br />
<xsl:template match="member"><br />
<html xmlns="http://www.w3.org/1999/xhtml"><br />
<head><br />
<title>EU Member States</title><br />
<style type="text/css"><br />
h3 {font-size: 16pt} body {font-size: 13pt}<br />
</style><br />
</head><br />
<body><br />
<h3>EU Member States</h3><br />
<paragraph><br />
There are<br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="count(state)" /><br />
member states, listed starting from the most recent<br />
year:<br />
</paragraph><br />
<ul><br />
<xsl:apply-templates select="state"><br />
<xsl:sort select="@joined" data-type="number"<br />
order="descending" /><br />
</xsl:apply-templates><br />
</ul><br />
</body><br />
</html><br />
</xsl:template><br />
<xsl:template match="state"><br />
<xsl:element name="li"<br />
namespace="http://www.w3.org/1999/xhtml"><br />
<xsl:apply-templates /><br />
<xsl:text> (</xsl:text><br />
<xsl:value-of select="@joined" /><br />
<xsl:text>)</xsl:text><br />
</xsl:element><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<!DOCTYPE html<br />
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br />
<html xmlns="http://www.w3.org/1999/xhtml"><br />
<head><br />
<title>EU Member States</title><br />
<style type="text/css"><br />
h3 {font-size: 16pt} body {font-size: 13pt}<br />
</style><br />
</head><br />
<body><br />
<h3>EU Member States</h3><br />
<paragraph><br />
There are<br />
7<br />
member states, listed starting from the most recent<br />
year:<br />
</paragraph><br />
<ul><br />
<li>Austria (1995)</li><br />
<li>Sweden (1995)</li><br />
<li>Portugal (1986)</li><br />
<li>Spain (1986)</li><br />
<li>Denmark (1973)</li><br />
<li>United Kingdom (1973)</li><br />
<li>Belgium (1950)</li><br />
</ul><br />
</body><br />
</html></source><br />
<br />
<br />
<br />
== Sort by different data types and order==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?><br />
<BOOK><br />
<TITLE>Java</TITLE><br />
<AUTHOR><br />
<FIRSTNAME>Jack</FIRSTNAME><br />
<LASTNAME>Smith</LASTNAME><br />
</AUTHOR><br />
<BINDING>hardcover</BINDING><br />
<PAGES>724</PAGES><br />
<PRICE>$9.95</PRICE><br />
</BOOK><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet<br />
version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="/"><br />
<HTML><br />
<HEAD><br />
<TITLE>Book Inventory</TITLE><br />
</HEAD><br />
<BODY><br />
<H2>Book Inventory</H2><br />
<H3>Trade Paperback Books</H3><br />
<xsl:apply-templates <br />
select="INVENTORY/BOOK[BINDING="trade paperback"]"><br />
<xsl:sort <br />
select="AUTHOR/LASTNAME" <br />
data-type="text"<br />
order="ascending"/><br />
<xsl:sort <br />
select="AUTHOR/FIRSTNAME" <br />
data-type="text"<br />
order="ascending"/><br />
<xsl:sort<br />
select="PAGES" <br />
data-type="number"<br />
order="descending"/><br />
</xsl:apply-templates><br />
</BODY><br />
</HTML><br />
</xsl:template><br />
<xsl:template match="BOOK"><br />
<SPAN STYLE="font-style:italic">Author: </SPAN><br />
<xsl:value-of select="AUTHOR"/><BR/><br />
<SPAN STYLE="font-style:italic">Title: </SPAN><br />
<xsl:value-of select="TITLE"/><BR/><br />
<SPAN STYLE="font-style:italic">Binding type: </SPAN><br />
<xsl:value-of select="BINDING"/><BR/><br />
<SPAN STYLE="font-style:italic">Number of pages: </SPAN><br />
<xsl:value-of select="PAGES"/><BR/><br />
<SPAN STYLE="font-style:italic">Price: </SPAN><br />
<xsl:value-of select="PRICE"/><P/><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<HTML><br />
<HEAD><br />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br />
<TITLE>Book Inventory</TITLE><br />
</HEAD><br />
<BODY><br />
<H2>Book Inventory</H2><br />
<H3>Trade Paperback Books</H3><br />
</BODY><br />
</HTML></source><br />
<br />
<br />
<br />
== Sort by last name than first name==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<addressbook><br />
<address><br />
<name><br />
<title>Mr.</title><br />
<first-name>Jack</first-name><br />
<last-name>Smith</last-name><br />
</name><br />
<street>1234 Main Street</street><br />
<city>New York</city><br />
<state>WI</state><br />
<zip>48392</zip><br />
</address><br />
</addressbook><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text"/><br />
<xsl:template match="/"><br />
<xsl:for-each select="addressbook/address"><br />
<xsl:sort select="name/last-name"/><br />
<xsl:sort select="name/first-name"/><br />
<xsl:if test="name/title"><br />
<xsl:value-of select="name/title"/><br />
<xsl:text> </xsl:text><br />
</xsl:if><br />
<xsl:value-of select="name/first-name"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="name/last-name"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:value-of select="street"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:value-of select="city"/><br />
<xsl:text>, </xsl:text><br />
<xsl:value-of select="state"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="zip"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:text>&#xA;</xsl:text><br />
</xsl:for-each><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Mr. Jack Smith<br />
1234 Main Street<br />
New York, WI 48392</source><br />
<br />
<br />
<br />
== sort by name()==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<list><br />
<freezer><br />
<element>peas</element><br />
<element>green beans</element><br />
<element>pot pie</element><br />
<element>ice cream</element><br />
</freezer><br />
<bakery><br />
<element>rolls</element><br />
<element>jelly doughnuts</element><br />
<element>bread</element><br />
</bakery><br />
<produce><br />
<element>bananas</element><br />
<element>kumquats</element><br />
<element>apples</element><br />
</produce><br />
</list><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" /><br />
<xsl:template match="list"><br />
<xsl:apply-templates select="*"><br />
<xsl:sort select="name()" /><br />
</xsl:apply-templates><br />
</xsl:template><br />
<xsl:template match="*"><br />
<xsl:text>Section: </xsl:text><br />
<xsl:value-of select="name()" /><br />
<xsl:text>&#10;</xsl:text><br />
<xsl:apply-templates select="element"><br />
<xsl:sort /><br />
</xsl:apply-templates><br />
</xsl:template><br />
<xsl:template match="element"><br />
<xsl:text> * </xsl:text><br />
<xsl:apply-templates /><br />
<xsl:text>&#10;</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Section: bakery<br />
* bread<br />
* jelly doughnuts<br />
* rolls<br />
Section: freezer<br />
* green beans<br />
* ice cream<br />
* peas<br />
* pot pie<br />
Section: produce<br />
* apples<br />
* bananas<br />
* kumquats</source><br />
<br />
<br />
<br />
== sort data-type="number" order="descending"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?><br />
<member><br />
<state joined="1995">Austria</state><br />
<state joined="1950">Belgium</state><br />
<state joined="1973">Denmark</state><br />
<state joined="1986">Portugal</state><br />
<state joined="1986">Spain</state><br />
<state joined="1995">Sweden</state><br />
<state joined="1973">United Kingdom</state><br />
</member><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" /><br />
<xsl:template match="member"><br />
<xsl:text>Number of EU Member States: </xsl:text><br />
<xsl:value-of select="count(state)" /><br />
<xsl:text>&#10;</xsl:text><br />
<xsl:apply-templates select="state/@joined"><br />
<xsl:sort data-type="number" order="descending" /><br />
</xsl:apply-templates><br />
<xsl:text>&#10;</xsl:text><br />
</xsl:template><br />
<xsl:template match="state/@joined"><br />
<xsl:text> - </xsl:text><br />
<xsl:apply-templates select=".." /><br />
<xsl:text> (</xsl:text><br />
<xsl:value-of select="." /><br />
<xsl:text>)&#10;</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Number of EU Member States: 7<br />
- Austria (1995)<br />
- Sweden (1995)<br />
- Portugal (1986)<br />
- Spain (1986)<br />
- Denmark (1973)<br />
- United Kingdom (1973)<br />
- Belgium (1950)</source><br />
<br />
<br />
<br />
== sort elements==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<names><br />
<name>John</name><br />
<name>Josua</name><br />
<name>Charles</name><br />
<name>Alice</name><br />
<name>Martha</name><br />
<name>George</name><br />
</names><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="/"><br />
<TABLE><br />
<xsl:apply-templates select="//name"><br />
<xsl:sort order="descending" select="."/><br />
</xsl:apply-templates><br />
</TABLE><br />
</xsl:template><br />
<xsl:template match="name"><br />
<TR><br />
<td><br />
<xsl:value-of select="."/><br />
</TH><br />
</TR><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><TABLE><TR><td>Martha</TH></TR><TR><td>Josua</TH></TR><TR><td>John</TH></TR><TR><td>George</TH></TR><TR><td>Charles</TH></TR><TR><td>Alice</TH></TR></TABLE></source><br />
<br />
<br />
<br />
== Sort in a for-each loop==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<numberlist><br />
<number>127</number><br />
<number>23</number><br />
<number>10</number><br />
</numberlist><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" indent="no"/><br />
<xsl:strip-space elements="*"/><br />
<xsl:variable name="newline"><br />
<xsl:text></xsl:text><br />
</xsl:variable><br />
<xsl:template match="/"><br />
<xsl:for-each select="numberlist/number"><br />
<xsl:sort select="." data-type="number"/><br />
<xsl:value-of select="."/><br />
<xsl:value-of select="$newline"/><br />
</xsl:for-each><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
1023127</source><br />
<br />
<br />
<br />
== sort order="descending"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?><br />
<europe><br />
<state>Belgium</state><br />
<state>Germany</state><br />
<state>Finland</state><br />
<state>Greece</state><br />
<state>Ireland</state><br />
<state>Luxembourg</state><br />
<state>Switzerland</state><br />
</europe><br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" /><br />
<xsl:template match="europe"><br />
<xsl:apply-templates select="state"><br />
<xsl:sort order="descending" /><br />
</xsl:apply-templates><br />
<xsl:text>Number of European States: </xsl:text><br />
<xsl:value-of select="count(state)" /><br />
<xsl:text>&#10;</xsl:text><br />
</xsl:template><br />
<xsl:template match="state"><br />
<xsl:text> - </xsl:text><br />
<xsl:apply-templates /><br />
<xsl:text>&#10;</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
- Switzerland<br />
- Luxembourg<br />
- Ireland<br />
- Greece<br />
- Germany<br />
- Finland<br />
- Belgium<br />
Number of European States: 7</source><br />
<br />
<br />
<br />
== sort order="descending" select="."==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<names><br />
<name>John</name><br />
<name>Josua</name><br />
<name>Charles</name><br />
<name>Alice</name><br />
<name>Martha</name><br />
<name>George</name><br />
</names><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="/"><br />
<TABLE><br />
<xsl:for-each select="//name"><br />
<xsl:sort order="descending" select="."/><br />
<TR><br />
<td><br />
<xsl:value-of select="."/><br />
</TH><br />
</TR><br />
</xsl:for-each><br />
</TABLE><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><TABLE><TR><td>Martha</TH></TR><TR><td>Josua</TH></TR><TR><td>John</TH></TR><TR><td>George</TH></TR><TR><td>Charles</TH></TR><TR><td>Alice</TH></TR></TABLE></source><br />
<br />
<br />
<br />
== sort select="."==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<br />
<?xml version="1.0"?><br />
<numberlist><br />
<number>127</number><br />
<number>23</number><br />
<number>10</number><br />
</numberlist><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text"/><br />
<xsl:template match="/"><br />
<xsl:for-each select="numberlist/number"><br />
<xsl:sort select="."/><br />
<xsl:value-of select="."/><br />
<xsl:text>&#xA;</xsl:text><br />
</xsl:for-each><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
10<br />
127<br />
23</source><br />
<br />
<br />
<br />
== sort select="." data-type="number"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<numberlist><br />
<number>127</number><br />
<number>23</number><br />
<number>10</number><br />
</numberlist><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text"/><br />
<xsl:template match="/"><br />
<xsl:for-each select="numberlist/number"><br />
<xsl:sort select="." data-type="number"/><br />
<xsl:value-of select="."/><br />
<xsl:text>&#xA;</xsl:text><br />
</xsl:for-each><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
10<br />
23<br />
127</source><br />
<br />
<br />
<br />
== sort select="xs:integer(.)"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<numberlist><br />
<number>127</number><br />
<number>23</number><br />
<number>10</number><br />
</numberlist><br />
File: Transform.xslt<br />
<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="2.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"><br />
<xsl:output method="text"/><br />
<xsl:template match="/"><br />
<xsl:for-each select="numberlist/number"><br />
<xsl:sort select="xs:integer(.)"/><br />
<xsl:value-of select="."/><br />
<xsl:text>&#xA;</xsl:text><br />
</xsl:for-each><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
10<br />
23<br />
127</source><br />
<br />
<br />
<br />
== The <xsl:sort> Element is used to specify sort order for node-sets==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
The xsl:sort element can be used together with the xsl:apply-templates element and the xsl:for-each element. <br />
File: Data.xml<br />
<names><br />
<name>John</name><br />
<name>Josua</name><br />
<name>Charles</name><br />
<name>Alice</name><br />
<name>Martha</name><br />
<name>George</name><br />
</names><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="/"><br />
<TABLE><br />
<xsl:for-each select="//name"><br />
<xsl:sort order="ascending" select="."/><br />
<TR><br />
<td><br />
<xsl:value-of select="."/><br />
</TH><br />
</TR><br />
</xsl:for-each><br />
</TABLE><br />
</xsl:template><br />
<br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><TABLE><TR><td>Alice</TH></TR><TR><td>Charles</TH></TR><TR><td>George</TH></TR><TR><td>John</TH></TR><TR><td>Josua</TH></TR><TR><td>Martha</TH></TR></TABLE></source></div>