xslt
  • apply-templates
  • 2013-07-12 4 views 0 likes 
    0

    하나 이상의 PID를 찾으면 select 문 순서로 정렬 할 수있는 방법이 있습니까?선택에서 OR을 사용할 때 XSLT 정렬

    <xsl:apply-templates select="td:Benutzer_zu_POI[ 
    td:PID = '400639' or 
    td:PID = '400929' or 
    td:PID = '401184' or 
    td:PID = '401006' or 
    td:PID = '430003408' or 
    td:PID = '401519' or 
    td:PID = '400660' or 
    td:PID = '500287' or 
    td:PID = '200461' or 
    td:PID = '400756']"> 
    

    도움을 주셔서 감사합니다.

    답변

    0

    원하는대로 자동으로 수행 할 수는 없지만 그것은 이런 식으로 뭔가를 갈 것 :

    <xsl:apply-templates select="td:Benutzer_zu_POI[ 
    td:PID = '400639' or 
    td:PID = '400929' or 
    td:PID = '401184' or 
    td:PID = '401006' or 
    td:PID = '430003408' or 
    td:PID = '401519' or 
    td:PID = '400660' or 
    td:PID = '500287' or 
    td:PID = '200461' or 
    td:PID = '400756']"> 
        <xsl:sort select="string-length(
             substring-before(
             '|400639|400929|401184|401006|...|400756|', 
             concat('|', td:PID, '|')))" 
          data-type="number" /> 
    </xsl:apply-templates> 
    

    이 어떻게 작동하는지 설명하기 위해 의도는 항목의 순서에 따라 선택의 결과로 작은 숫자를 생산하는 것입니다. 그래서 예를 들어, 400639, 이것은 평가 : 401,184에 대한

    string-length(
        substring-before(
        '|400639|400929|401184|401006|...|400756|', 
        '|400639|')) 
    
    string-length('') 
    
    0 
    

    , 그렇게에

    string-length(
        substring-before(
        '|400639|400929|401184|401006|...|400756|', 
        '|401184|')) 
    
    string-length('|400639|400929') 
    
    14 
    

    하고있어.

    concat()의 목적은 부분 ​​일치를 방지하기 위해 파이프 기호의 값을 구분하는 것입니다.

    (assume td:PID = 456) 
    
    string-length(
        substring-before(
        '|123456|234567|34567|456|', 
        '456')) 
    
    string-length(
        '|123') 
    
    4 
    

    실제로 그 이후에해야 할 때 456이 23456 및 34567 앞에 배치 될 수 있다는 것을 의미 : 우리는 CONCAT()를 사용하지 않은 경우, 당신은이 같은 상황이있을 수 있습니다. 이 구분에 둘러싸여 때이 발생하지 않습니다

    string-length(
        substring-before(
        '|123456|234567|34567|456|', 
        '|456|')) 
    
    string-length(
        '|123456|234567|34567') 
    
    20 
    
    +0

    좋습니다. 잘 작동합니다! 고맙습니다. 정확히 concat 부분 않습니다 ... ?? –

    +0

    위 설명을 추가했습니다. 아직 명확하지 않은 경우 알려 주시기 바랍니다. – JLRishe

    +0

    알았어요. 설명 주셔서 감사합니다! –

    0

    이 트릭을 할 것인가?

    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400639']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401184']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401006']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '430003408']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401519']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400660']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '500287']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '200461']/> 
    <xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400756']/> 
    

    (가 상당의 여부는 당신이 우리를 표시하지 않은 데이터의 세부 사항에 따라 달라집니다. 그것은 PID를 여러 일치하는 경우 귀하의 버전은 한 번도 각 Benutzer를 표시합니다.).

     관련 문제

    • 관련 문제 없음^_^