Xml 在XSLT中排序,仅当字符串长度!=0
我使用下面的XSLT块从XML文件中获取“最新”项的描述。它按日期排序(在我的XML中显示为Xml 在XSLT中排序,仅当字符串长度!=0,xml,xslt,sorting,Xml,Xslt,Sorting,我使用下面的XSLT块从XML文件中获取“最新”项的描述。它按日期排序(在我的XML中显示为2011-11-15),然后从排序列表中选择最上面的一个。虽然我刚刚发现有些项目没有日期,它们只是显示为。问题是XSLT在排序列表的顶部对这些项进行排序,从而首先选择没有日期的项 那么,如何按日期对长度大于零的项目进行排序 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl
2011-11-15
),然后从排序列表中选择最上面的一个。虽然我刚刚发现有些项目没有日期,它们只是显示为
。问题是XSLT在排序列表的顶部对这些项进行排序,从而首先选择没有日期的项
那么,如何按日期对长度大于零的项目进行排序
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="/products/product">
<xsl:sort select="normalize-space(substring(date,0,4))" order="ascending" />
<xsl:sort select="normalize-space(substring(date,4,2))" order="ascending" />
<xsl:sort select="normalize-space(substring(date,7,2))" order="ascending" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="product">
<xsl:if test="position()=1">
<xsl:value-of select="description"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
只需避免在排序中包含那些没有日期的:
<xsl:apply-templates select="/products/product[date]">
顺便说一句,(a)您似乎选择了列表中最早的项目,而不是最新的项目,(b)确实没有必要将日期分成三部分进行格式设置:如果所有日期都是YYYY-MM-DD格式,则应按字母顺序进行排序,除非系统决定使用奇数排序顺序,在这种情况下,
可能更安全。我只想把它们排除在外。它是由Magento生成的XML,因此我无法手动删除该条目。它就在那里,所以“从我的代码中”得到它的唯一方法就是忽略这些条目。实际上日期显示为2012-01-23 00:00:00
,所以我无法让你的代码工作。@Jeffreyroosendal,请编辑这个问题并提供一个源XML文档(小)实例——人们不必猜测数据是什么。