Có thể với xslt để lấy trường ngày và trừ số ngày N từ ngày đó không? Nếu vậy, bạn có thể vui lòng cung cấp cho tôi một ví dụ không?xslt - trừ các ngày
Trả lời
Dưới đây là một minh chứng làm thế nào để làm điều này trong XSLT 2.0:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="vToday" select="current-date()"/>
Today is: <xsl:sequence select="$vToday"/>
30 days ago it was: <xsl:sequence select=
"$vToday -30*xs:dayTimeDuration('P1D')"/>
365 days ago it was: <xsl:sequence select=
"$vToday -365*xs:dayTimeDuration('P1D')"/>
</xsl:template>
</xsl:stylesheet>
khi chuyển đổi này được áp dụng trên bất kỳ tài liệu XML nào (không được sử dụng), kết quả mong muốn, chính xác được tạo ra:
Today is: 2010-10-07-07:00
30 days ago it was: 2010-09-07-07:00
365 days ago it was: 2009-10-07-07:00
+1 Câu trả lời hay! –
FYI ... '
FYI2 ... Ngay cả với 'phiên bản = 2.0' được chỉ định, Chrome 30 tạo một trang trống. Tuy nhiên, Firefox 25 hiển thị kết quả. – doubleJ
Vâng, XSLT có thể chia chuỗi và phân tích cú pháp số, do đó, có, nó sẽ là "có thể".
Tuy nhiên, sẽ dễ dàng hơn và hiệu quả hơn nếu bạn có thể sử dụng các chức năng mở rộng và triển khai thực hiện bằng ngôn ngữ khác. Tuy nhiên, nếu và cách hoạt động phụ thuộc vào công cụ XSLT được sử dụng.
EXSLT có thể có mọi thứ bạn cần: http://www.exslt.org/date/functions/add/index.html
Vâng, với XSLT 2.0 nó là có thể, và rất dễ dàng để làm.
Có rất nhiều Date/Time/Duration functions in XPATH 2.0, là một phần của XSLT 2.0.
dụ này sẽ trừ 1 ngày kể từ ngày 2010/1/1 để sản xuất 2009/12/31:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<xsl:value-of select="xs:date('2010-01-01') - xs:dayTimeDuration('P1D')" />
</xsl:template>
</xsl:stylesheet>
<xsl:template name="dim" >
<xsl:param name="y" />
<xsl:param name="m"/>
<xsl:choose>
<xsl:when test="($m=1 or $m=3 or $m=5 or $m=7 or $m=8 or $m=10 or $m=12)" >
31
</xsl:when>
<xsl:when test="$m>2">
30
</xsl:when>
<xsl:when test="($m=2) and (not($y mod 4=0)) or ($y mod 100=0) and (not($y mod 400=0))">
28
</xsl:when>
<xsl:otherwise>
29
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="minusdays">
<xsl:param name="year" />
<xsl:param name="month" />
<xsl:param name="day"/>
<xsl:param name="days"/>
<xsl:variable name="lm" select="number($month)-1+number($month=1)*12"/>
<xsl:variable name="lmdays">
<xsl:call-template name="dim">
<xsl:with-param name="y" select="$year"/>
<xsl:with-param name="m" select="$lm"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$days<$day">
<xsl:value-of select="$year"/>
<xsl:if test="number($month)<10">0</xsl:if>
<xsl:value-of select="$month"/>
<xsl:if test="($day - $days)<10">0</xsl:if>
<xsl:value-of select="$day - $days"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="minusdays">
<xsl:with-param name="year"
select="number($year)-number($month=1)"/>
<xsl:with-param name="month" select="$lm" />
<xsl:with-param name="day" select="$lmdays"/>
<xsl:with-param name="days" select="$days - $day" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Tôi có thể thấy rằng tất cả các giải pháp được đề cập là dành cho XSLT 2.0. Tôi có giải pháp tương tự cho XSLT 1.0 sử dụng EXSLT ngày: thêm
Ví dụ: Hãy xem số ngày bị trừ là 365 và chúng tôi cần nó là ngày bắt đầu mặc định. Trong trường hợp này, chúng tôi phải cung cấp thời lượng 365 ngày theo định dạng xs: dayTimeDuration tức là '-P365D'.
Vui lòng tìm bên dưới mã.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
extension-element-prefixes="date xs"
exclude-result-prefixes="date xs" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" />
<xsl:template match="/">
<xsl:variable name="vCurrDate" select="date:date-time()"/>
<xsl:variable name="vDefaultStDate" select="(date:add($vCurrDate, '-P365D'))"/>
</xsl:template>
</xsl:stylesheet>
Thật không may, rất ít bộ xử lý XSLT 1.0 hỗ trợ EXSLT 'date: add()'. Đối với một giải pháp XSLT 1.0 thuần túy, không có phần mở rộng, hãy xem: https://stackoverflow.com/questions/23566734/date-operations-on-xsl-1-0/23569278#23569278 –
- 1. XSLT Format ngày
- 2. Vòng lặp qua các ngày trừ ngày cuối tuần
- 3. ngày Trừ trong PHP
- 4. Trừ hai ngày
- 5. trừ ngày javascript
- 6. Trừ ngày trong JavaScript
- 7. Ngày trừ 1 năm?
- 8. Trừ Ngày với Python
- 9. Ngày giờ chuyển đổi XSLT sang định dạng ngày
- 10. Format một ngày trong XML qua XSLT
- 11. Số ngày trong phạm vi ngày, trừ ngày cuối tuần và các ngày khác, trong C#
- 12. Số ngày trừ Javascript từ ngày
- 13. Cách định dạng ngày trong xslt?
- 14. Cách trừ x số ngày từ ngày sang ngày
- 15. Thêm ngày vào một ngày nhưng loại trừ các ngày cuối tuần
- 16. Trừ ngày tháng với Ruby
- 17. Trừ hai ngày trong Java
- 18. Trừ ngày/tháng/năm từ đối tượng Ngày
- 19. Làm cách nào để trừ một ngày khỏi một ngày?
- 20. Bash Shell Ngày hiện tại Trừ số ngày
- 21. Trừ hai ngày tháng trong php
- 22. Cách phân tích chuỗi thành ngày theo xslt 2.0
- 23. Trừ hai ngày tại Ruby on Rails
- 24. LINQ to Entities để trừ 2 ngày
- 25. Ngày hiện tại trừ 4 tháng?
- 26. Nhận phạm vi ngày giữa hai ngày trừ ngày cuối tuần
- 27. Tìm ngày bằng cách trừ số X ngày kể từ ngày cụ thể trong Javascript
- 28. Phép trừ trừ trong các mẫu django
- 29. Loại trừ thuộc tính khỏi phần tử xml cụ thể bằng cách sử dụng xslt
- 30. Làm thế nào để Trừ hai ngày tháng trong php
Bạn đang sử dụng bộ xử lý XSLT nào? –
XSLT 1.0 hoặc XSLT 2.0? Định dạng ngày tháng là gì? –
Câu hỏi hay, +1. Xem câu trả lời của tôi cho một giải pháp XSLT 2.0 hoàn chỉnh. –