У меня есть данные XML, такие как:
<feed>
<entry>
<id>4</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title2</title>
</entry>
<entry>
<id>3</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title1</title>
</entry>
<entry>
<id>2</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title1</title>
</entry>
<entry>
<id>1</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title</title>
</entry>
</feed>
И мне нужно, чтобы результат получился следующим образом:
<feed>
<entry>
<id>1</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title</title>
</entry>
<entry>
<id>2</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title1</title>
</entry>
<entry>
<id>3</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title1</title>
</entry>
<entry>
<id>4</id>
<updated>2011-01-18T16:55:54Z</updated>
<title>title2</title>
</entry>
</feed>
В основном мне нужен XSLT для сортировки по названию, затемЯ БЫ.Я сделал XSLT, но более короткие времена выходят последними (с использованием Xerces):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="atom:feed">
<xsl:copy>
<xsl:apply-templates select="*" />
<xsl:for-each select="atom:entry">
<xsl:sort select="string-length(atom:title)" order="descending" />
<xsl:sort select="atom:title" data-type="text" order="ascending" />
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="atom:feed/atom:entry"/>
</xsl:stylesheet>