2008-10-16 5 views
0

내가 속성 값을 기준으로 항목을 주문하려고 해요 :주문 값

<xsl:apply-templates select="Question"> 
    <xsl:sort order="ascending" select="@Value"></xsl:sort> 
</xsl:apply-templates> 

이 순서를 않습니다,하지만 난 1,2,3 같은 값을 가질 수 ... 10, 11,. .. 20 그리고 1,10,11, ... 2,20 ... 3. 등등을 주문할 것입니다.
또한 1.A, 1.B, 2.A, 2.B와 같은 값을 가질 수 있습니다.

숫자 우선 순위에서 숫자와 영문자를 고려하여이 값들을 어떻게 정렬 할 수 있습니까?

답변

7

, 두 <xsl:sort> 지침을 처리 할 수있는 :

<xsl:apply-templates select="Question"> 
    <xsl:sort select="substring-before(@Value, '.')" data-type="number" /> 
    <xsl:sort select="substring-after(@Value, '.')" /> 
</xsl:apply-templates> 

를 숫자 중 일부는 여러 부분이있을 수 있습니다 일부는하지, 내가 추측하는 경우 할 것입니다

<xsl:apply-templates select="Question"> 
    <xsl:sort select="substring-before(concat(@Value, '.'), '.')" data-type="number" /> 
    <xsl:sort select="substring-after(@Value, '.')" /> 
</xsl:apply-templates> 

여분 concat(@Value, '.')는 값의 끝에 '.'를 추가하는 substring-before() 항상 수를 얻을 수 있도록.

2

당신은 data-type 속성을 사용하여 숫자 순서대로 정렬 할 수 있습니다

<xsl:sort order="ascending" select="@Value" data-type="number"></xsl:sort> 

내장 된 분류 기능 (예 : 당신이 언급 다중 키와 같은) 더 복잡한 순서를 지원하지 않습니다.

0

sorting 번호는이를 사용할 수 있습니다 다음 data-type 속성이 here을 사용

<xsl:template match="employees"> 
    <xsl:apply-templates> 
    <xsl:sort select="salary" data-type="number"/> 
    </xsl:apply-templates> 
</xsl:template> 

하는 것으로. 1.A, 1.B, 2.A, 2.B와 같은 값에 대해서는 다시 텍스트로 돌아가서 추한 둥지를 만드는 영리한 재료에 의지해야합니다. 흥미로운 방식으로 사용할 수있는 xsl:numberelement을 고려하십시오. 당신이 모든 질문은 여러 부분으로 번호를 가지고 있음을 알고있는 경우