3
A
回答
1
在命名模板上選擇<xsl:function>
的主要原因是函數的可組合性要高得多。
這是非常容易和方便的編寫產生想要的結果一個<xsl:function>
:
<xsl:function name="my:when" as="xs:string">
<xsl:param name="pDateTime" as="xs:dateTime"/>
<xsl:sequence select=
"for $vToday in xs:dateTime(current-date()),
$vTomorrow in $vToday
+ xs:dayTimeDuration('P1D'),
$vDayAfterTomorrow in $vTomorrow
+ xs:dayTimeDuration('P1D'),
$vNextWeek in $vToday
+ 7* xs:dayTimeDuration('P1D'),
$vNextFortnight in $vNextWeek
+ 7* xs:dayTimeDuration('P1D')
return
if($pDateTime lt $vToday)
then 'in the Past'
else if($pDateTime lt $vTomorrow)
then 'Today'
else if($pDateTime lt $vDayAfterTomorrow)
then 'Tomorrow'
else if($pDateTime lt $vNextWeek)
then 'This week'
else if($pDateTime lt $vNextFortnight)
then 'Next week'
else 'In the Future'
"/>
</xsl:function>
這是一個完整的轉型:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:sequence select="my:when(current-dateTime())"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P1D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P2D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P3D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P4D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P5D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P6D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P7D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P8D'))"/>,
<xsl:sequence select="my:when(current-dateTime()
+xs:dayTimeDuration('P9D'))"/>
</xsl:template>
<xsl:function name="my:when" as="xs:string">
<xsl:param name="pDateTime" as="xs:dateTime"/>
<xsl:sequence select=
"for $vToday in xs:dateTime(current-date()),
$vTomorrow in $vToday
+ xs:dayTimeDuration('P1D'),
$vDayAfterTomorrow in $vTomorrow
+ xs:dayTimeDuration('P1D'),
$vNextWeek in $vToday
+ 7* xs:dayTimeDuration('P1D'),
$vNextFortnight in $vNextWeek
+ 7* xs:dayTimeDuration('P1D')
return
if($pDateTime lt $vToday)
then 'in the Past'
else if($pDateTime lt $vTomorrow)
then 'Today'
else if($pDateTime lt $vDayAfterTomorrow)
then 'Tomorrow'
else if($pDateTime lt $vNextWeek)
then 'This week'
else if($pDateTime lt $vNextFortnight)
then 'Next week'
else 'In the Future'
"/>
</xsl:function>
</xsl:stylesheet>
當施加這種轉變(對任何文檔 - 未使用),產生想要的正確結果:
Today,
Tomorrow,
This week,
This week,
This week,
This week,
This week,
Next week,
Next week,
Next week
1
在這種情況下,外部功能是最適合的。
XSLT最適合模式匹配和轉換,而不是計算。
相關問題
- 1. xslt在使用計數函數的組下應用模板
- 2. 使用XSLT 2.0在命名模板中使用節點參數
- 3. 模板:XSLT vs jQuery
- 4. 使用XSLT模板與XML ::
- 5. 在函數調用中使用模板模板參數
- 6. 在Smarty模板中使用php函數
- 7. 在模板中使用函數(Django/Python)
- 8. 在模板函數中使用initializer_list
- 9. 函數模板特使用模板類
- 10. 在VS express中使用aspnetBoilerplate模板
- 11. 使用模板函數
- 12. XSLT:在另一個模板中重新使用模板
- 13. XSLT:使用提供參數的模板中的參數調用模板
- 14. 通用映射值 - 模板使用XSLT
- 15. 使用XSL XSLT困惑:應用模板
- 16. 在模板類中使用非模板函數
- 17. 如何在PHP5中使用XSLT函數?
- 18. 使用模板函數指針聲明模板函數
- 19. XSLT:使用多個或'模板匹配來應用模板
- 20. C模板仿函子。類模板vs函數模板
- 21. scala模板函數vs forSome
- 22. 使用XSLT的電子郵件模板
- 23. XSLT 2.0 - 使用包含模板匹配()
- 24. 如何在XSLT中使用帶有應用模板的鍵
- 25. 在XSLT中應用模板使用變量
- 26. C++使用函數模板,在模板類
- 27. 錯誤以遞歸模板函數使用STXXL模板在C++
- 28. 使用宏在VS中獲取函數
- 29. 如何使用類模板完全專用函數模板?
- 30. XSLT:如何另一個模板內重複使用的模板
如果您使用XSLT 1.0,您是否使用XSLT 1.0或2.0或者您有什麼樣的函數? – 2010-12-22 16:02:27
好問題,+1。查看我的答案以獲得由提供的完整且簡單的解決方案。 –
2010-12-22 18:16:01
xslt 1.0是我使用的一個! – Himmators 2010-12-23 00:57:01