我有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对标题进行排序,然后是ID。我已经制作了一个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>
答案 0 :(得分:11)
对于您的输入样本(实际上不是Atom提要),此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="feed">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="update" order="descending"/>
<xsl:sort select="title"/>
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出:
<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>
注意:只要没有不同的时区,此日期时间格式就可以像字符串一样排序(默认)。