2011-10-18 39 views
9

Tôi có một XML với dữ liệu datetime:định dạng và hiển thị datetime trong XSLT

<A> 
    <StartDate>2011-11-01T00:00:00</StartDate> 
    <EndDate>2011-11-30T00:00:00</EndDate> 
    <IsRecurring>false</IsRecurring> 
</A> 

tôi cần phải nhận được trong XSLT chỉ ngày theo định dạng sau:

01/11/2011 - 30/11/2011 

Khi tôi làm:

<xsl:value-of select="A/StartDate/"> - <xsl:value-of select="A/EndDate/"> 

tôi có được điều này:

2011-11-01T00:00:00 - 2011-11-30T00:00:00 

Tôi làm cách nào để hiển thị chính xác?

Trả lời

17

Nhìn vào chức năng chuỗi XPath: substring, substring-before và vv

tham khảo: http://www.w3.org/TR/xpath/#section-String-Functions

<xsl:variable name="dt" select="'2011-11-01T12:13:59'"/> 

     <xsl:value-of select="concat(
         substring($dt, 9, 2), 
         '/', 
         substring($dt, 6, 2), 
         '/', 
         substring($dt, 1, 4) 
        )"/> 
0

Ngoài @Kirill Polishchuk câu trả lời nếu bạn đang sử dụng XSLT 2.0, bạn có thể chỉ cần làm một thay thế:

substring(replace($input, "(\d{4})-(\d{2})-(\d{2})", "$3/$2/$1"), 0, 11) 

Trong đó $input là nội dung của các nút chứa ngày tháng.

+0

lẽ '$ 3/$ 2/$ 1'? –

+0

@KirillPolishchuk Có. :) – FailedDev

9

CHỈNH SỬA: Nếu bạn vẫn phải sử dụng XSLT 1.x, bạn có thể xem EXSLT's date:format-date user function. Trong trường hợp đó, mẫu là dd/MM/yyyy.

Nếu bạn đang sử dụng XSLT 2.0, sẽ dễ sử dụng hơn chức năng format-dateTime.

Dưới đây là ví dụ của bạn trong XSLT 2.0:

<xsl:value-of select="format-dateTime(A/StartDate, '[D01]/[M01]/[Y0001]')" /> 
- <xsl:value-of select="format-dateTime(A/EndDate, '[D01]/[M01]/[Y0001]')" /> 
+0

Tôi nhận được một ngoại lệ: "'format-dateTime()' là một hàm XSLT không xác định." Có lẽ tôi không sử dụng XSLT2.0? Làm thế nào tôi có thể kiểm tra nó? Làm thế nào tôi có thể thay đổi nó? – Naor

+1

@Bạn đã làm điều đó. Chỉ cần sử dụng câu trả lời Kirill Polishchuk. – FailedDev

Các vấn đề liên quan