我对XSLT有一个小问题......
基本上我有以下xml:
<Root>
<Node>
<Prop1></Prop1>
<Prop2></Prop2>
<Date>03/05/2013</Date>
...
</Node>
<Node>
<Prop1></Prop1>
<Prop2></Prop2>
<Date>01/01/2012</Date>
...
</Node>
</Root>
从此我生成一个表,它看起来像这样:
<table>
<tr>
<th colspan="2" style="text-align:left;">
<u>
Table:
</u>
</th>
</tr>
<xsl:for-each select="Root/Node[current-date() < date]">
<xsl:sort select="date" />
<tr>
<td><xsl:value-of select="prop1"/></td>
<td>
...
</td>
<td><xsl:value-of select="date"/></td>
</tr>
</xsl:for-each>
</table>
我想只获得日期过期的节点,基本上是日期&lt;的currentdate
我知道如何实现它吗?
答案 0 :(得分:1)
首先请记住,XPath是个案敏感的,如果Node
的名称实际上是Node1
或Node2
,则<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="currentDate" />
<xsl:template match="/">
<table>
<tr>
<th colspan="2" style="text-align:left;">
<u>
Table:
</u>
</th>
</tr>
<xsl:apply-templates select="Root/*[translate($currentDate, 'T:-', '') <
translate(Date, 'T:-', '')]">
<xsl:sort select="Date" />
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="Root/*">
<tr>
<td>
<xsl:value-of select="Prop1"/>
</td>
<td>
...
</td>
<td>
<xsl:value-of select="Date"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
将与该元素不匹配。
假设您正在使用XSLT 1.0,则没有内置方法来获取当前日期,因此您需要将其作为参数传递。如果你可以做到这一点,这样的事情应该可以解决问题:
{{1}}