的過期<item>
元件可以通過一個單一的XPath表達式被選擇,所提供的當前日期被提供 - 無論是在一個變量中,或作爲文字串。
以下解決方案使用XSLT 1.0作爲XPath 1.0的主機語言。
爲方便起見,當前日期指定作爲全球<xsl:param>
參數,命名爲pToday
。
另一個方便之處在於當前的年,月,日的值的變量$vthisYear
,$vthisMonth
和$vthisDay
定義。如有必要,可將這些變量引用替換爲XPath表達式中右側的定義。
的通緝單XPath表達式被包裹式在下面的XSLT轉換:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"
cdata-section-elements="item"/>
<xsl:param name="pToday" select="'04/23/2009'"/>
<xsl:variable name="vthisDay" select=
"substring($pToday,4,2)"/>
<xsl:variable name="vthisMonth" select=
"substring($pToday,1,2)"/>
<xsl:variable name="vthisYear" select=
"substring($pToday,7)"/>
<xsl:template match="/">
<nonExpired>
<xsl:copy-of select=
"/*/item
[$vthisYear < substring(@expires,7)
or
($vthisYear = substring(@expires,7)
and
$vthisMonth < substring(@expires,1,2)
)
or
($vthisYear = substring(@expires,7)
and
$vthisMonth = substring(@expires,1,2)
and
$vthisDay <= substring(@expires,4,2)
)
]
"/>
</nonExpired>
</xsl:template>
</xsl:stylesheet>
當上述變換所提供的XML文檔施加:
<content dataType="XML">
<item type="Promotion" name="Sample Promotion" expires="04/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
<item type="Promotion" name="Sample Promotion 2" expires="05/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
</content>
的通緝結果產生:
<nonExpired>
<item type="Promotion" name="Sample Promotion 2" expires="05/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
</nonExpired>
注意:oneporter的解決方案也將工作,只要其中的一些小錯誤得到糾正。此外,它需要返工,因爲它不切實際地期望當前日期將以與@expires
屬性中的日期不同的格式提供。