2013-02-21 3 views
3

XSL에서 이러한 종류의 정렬을 수행하는 방법을 알고있는 사람이 있습니까?XML을 XSL을 사용하여 RFC-822 날짜 형식으로 정렬

여기는 내가 지금까지 가지고 있지만 일별로 분류하고 나머지 날짜는 무시합니다.

 <xsl:apply-templates select="item"> 
      <xsl:sort select="pubDate" data-type="text" order="descending"/> 
     </xsl:apply-templates> 
+2

날짜는 날짜 또는 날짜 - 시간인가? XSLT 1.0 또는 XSLT 2.0을 사용하고 있습니까? 또한 XML을 게시하는 답변을 편집 할 수 있습니까? –

+1

분명히 가능하지만 사소하지는 않습니다. RFC-822 날짜를 정렬 가능한 것으로 변환하는 XSLT 파서를 작성해야합니다. EXSLT 함수와 XPath 문자열 함수를 사용할 것입니다. 이 날짜 - 시간 요소는 문자열에서 같은 위치에 항상 있다고 가정으로이이 솔루션은 매우 부서지기 쉬운 것 같습니다 도움이 http://www.codeproject.com/Articles/4261/Sorting-dates-in-XSL – nwellnhof

+1

. 이것은 반드시 사실 일 필요는 없습니다. 예를 들어, 날짜 - 시간 시작 부분의 요일은 선택 사항입니다. 또한 한 달 또는 두 자리를 사용하여 일을 지정할 수도 있습니다. – Vinit

답변

2

빠른 답장을 보내 주셔서 감사합니다. 나를 올바른 방향으로 가야 해. 그것을 해결할 관리! 유용한 링크를 찾았습니다

나는 XSLT 버전 2.0을 사용하고있었습니다. 변수를 사용하여 MMM 월을 대체하고 날짜를 하위 문자열로 묶는 경우입니다.

솔루션

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:variable name="Months" select="'Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="channel"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()[not(preceding-sibling::item) and not(self::item)]"/> 
     <xsl:apply-templates select="item"> 
      <!-- year --> 
     <xsl:sort select="substring(pubDate, 13, 4)" order="descending" data-type="number"/> 
     <!-- month --> 
     <xsl:sort select="string-length(substring-before($Months, substring(pubDate, 9, 3)))" order="descending" data-type="number"/> 
     <!-- day --> 
     <xsl:sort select="substring(pubDate, 6, 2)" order="descending" data-type="number"/> 
     <!-- hour --> 
     <xsl:sort select="substring(pubDate, 18, 2)" order="descending" data-type="number"/> 

     </xsl:apply-templates> 
     <xsl:apply-templates select="@*|node()[not(following-sibling::item) and not(self::item)]"/> 
</xsl:copy> 
</xsl:template> 

+1

수 있습니다 – nwellnhof

+1

@nwellnhof RFC-822 날짜를 사용하는 경우에는 그러하지 않아야합니다. 나는 OP가 RSS 피드를 사용하고 있고 그것을 검증하기 위해서 pubDate가 매우 엄격한 요구 사항을 가지고 있다고 가정하고 있습니다. 지금, pubDate가 형식 일 필요는 없지만 유효성을 검사하는 것은 사실입니다. – doubleJ