2011-10-14 6 views
1

저는 XSL 학습 단계에 있습니다. 날짜에 따라 요소를 정렬해야하는 문제가 있습니다. 입력 XML에는 목록이 들어 있습니다. 목록의 각 객체에는 복합 객체가 들어 있습니다. 복잡한 개체의 요소를 기반으로 목록을 정렬해야합니다. 예 : <list> <object> <date>2011-10-05<date/> </object> </list> <list> <object> <date>2011-10-04<date/> </object> </list> <list> <object> <date>2011-10-08<date/> </object>
</list>
XSL을 사용하여 목록 정렬

날짜를 기준으로 XML을 정렬해야합니다. 그것을 할 수 있습니까?. 도와주세요.

답변

0

가능합니다.

여러 xsl : sort 요소를 사용하여 여러 기준으로 선택 항목을 정렬 할 수 있습니다.

다음 1.0 XSLT 변환 :

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <list> 
    <object> 
     <date> 
     2011-10-05 
     </date> 
    </object> 
    </list> 
    <list> 
    <object> 
     <date> 
     2011-10-04 
     </date> 
    </object> 
    </list> 
    <list> 
    <object> 
     <date> 
     2011-10-08 
     </date> 
    </object> 
    </list> 
</root> 

는 다음과 같은 결과를 생성합니다 :

나는 당신의 병이 형성 입력을 기반으로 함께했다 .xml 파일에 적용

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <root> 
     <xsl:for-each select="root/list"> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 1, 4)"/> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 6, 2)"/> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date),9, 2)"/> 
     <xsl:copy-of select="."/> 
     </xsl:for-each> 
    </root> 
    </xsl:template> 
</xsl:stylesheet> 

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <list> 
     <object> 
     <date> 
     2011-10-04 
     </date> 
     </object> 
    </list> 
    <list> 
     <object> 
     <date> 
     2011-10-05 
     </date> 
     </object> 
    </list> 
    <list> 
     <object> 
     <date> 
     2011-10-08 
     </date> 
     </object> 
    </list> 
</root> 

나는 1 년 후 1 개월 및 마지막 날을 기준으로 먼저 정렬합니다. 물론 당신의 필요에 맞게 정렬 순서를 바꿀 수 있습니다.

나는 귀하의 문제를 해결할 수 있기를 바랍니다 :)

관련 문제