2011-04-29 3 views
2
 <row> 
      <cell>Phrase 1</cell> #0 
       <check shuffle="False"> 
        <option key="1"/> #1 
        <option key="0"/> #2 
        <option key="0"/> #3 
        <option key="0"/> #4 
        <option key="0"/> #5 
        <option key="0"/> #6 
       </check> 
       <cell>Phrase 2</cell> #7 
       <cell>Phrase 3</cell> #8 
       <check shuffle="False"> 
        <option key="1"/> #9 
        <option key="0"/> #10 
        <option key="0"/> #11 
        <option key="0"/> #12 
        <option key="0"/> #13 
        <option key="0"/> #14 
       </check> 
      </row> 

다음과 같은 문제가 있습니다.까다로운 XSL 문제 - 복잡한 배열의 위치 결정

셀과 각 옵션에 대해 "행"태그에서 "색인"을 찾아야합니다.

어떻게하면 XSL에서이 작업을 수행 할 수 있습니까? 각 셀은 하나의 셀 수로, 모든 형제 자매 태그의 각 "옵션"하위 태그도 포함됩니다. 검색하고 싶은 "색인"이라는 레이블을 붙였습니다. 아마도 "셀"대 "옵션"요소의 색인을 결정하는 한 가지 방법이있을 것입니다.

나는 XSL에 대해 조금 알고 있지만 문제가 생기고 꽤 좌절 할 정도입니다. 어떤 도움을 주셔서 감사합니다.

항상 감사드립니다.

답변

2

사용 xsl:number :이 입력으로

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()|@*" name="identity"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="cell|option"> 
     <xsl:call-template name="identity"/> 
     <xsl:variable name="vPosition"> 
      <xsl:number count="cell|option" level="any" from="row" /> 
     </xsl:variable> 
     <xsl:value-of select="$vPosition - 1"/> 
    </xsl:template> 
</xsl:stylesheet> 

(더 row들) :

<table> 
    <row> 
     <cell>Phrase 1</cell> #0     
     <check shuffle="False"> 
      <option key="1"/> #1      
      <option key="0"/> #2      
      <option key="0"/> #3      
      <option key="0"/> #4      
      <option key="0"/> #5      
      <option key="0"/> #6     
     </check> 
     <cell>Phrase 2</cell> #7     
     <cell>Phrase 3</cell> #8     
     <check shuffle="False"> 
      <option key="1"/> #9      
      <option key="0"/> #10      
      <option key="0"/> #11      
      <option key="0"/> #12      
      <option key="0"/> #13      
      <option key="0"/> #14     
     </check> 
    </row> 
    <row> 
     <cell>Phrase 1</cell> #0 
     <check shuffle="False"> 
      <option key="1"/> #1 
      <option key="0"/> #2 
      <option key="0"/> #3 
     </check> 
     <cell>Phrase 2</cell> #4 
     <check shuffle="False"> 
      <option key="1"/> #5 
      <option key="0"/> #6 
     </check> 
     <cell>Phrase 3</cell> #7 
    </row> 
</table> 

출력 :

<table> 
    <row> 
     <cell>Phrase 1</cell>0 #0     
     <check shuffle="False"> 
      <option key="1"></option>1 #1      
      <option key="0"></option>2 #2      
      <option key="0"></option>3 #3      
      <option key="0"></option>4 #4      
      <option key="0"></option>5 #5      
      <option key="0"></option>6 #6     
     </check> 
     <cell>Phrase 2</cell>7 #7     
     <cell>Phrase 3</cell>8 #8     
     <check shuffle="False"> 
      <option key="1"></option>9 #9      
      <option key="0"></option>10 #10      
      <option key="0"></option>11 #11      
      <option key="0"></option>12 #12      
      <option key="0"></option>13 #13      
      <option key="0"></option>14 #14     
     </check> 
    </row> 
    <row> 
     <cell>Phrase 1</cell>0 #0 
     <check shuffle="False"> 
      <option key="1"></option>1 #1 
      <option key="0"></option>2 #2 
      <option key="0"></option>3 #3 
     </check> 
     <cell>Phrase 2</cell>4 #4 
     <check shuffle="False"> 
      <option key="1"></option>5 #5 
      <option key="0"></option>6 #6 
     </check> 
     <cell>Phrase 3</cell>7 #7 
    </row> 
</table> 
+0

대서사입니다! : D 고마워! – bobber205

+0

@ bobber205 : 환영합니다! –

0

잘 모르겠습니다. 예를 들어 처리하는 동안 XSLT 스타일 시트에 표시됩니까? <option> 요소 인 경우 다른 <option><cell> 요소 중에서 해당 인덱스를 출력 하시겠습니까? 이를 위해서는 <xsl:number>이 필요합니다.

0

여기 하나의 방법은 그것을 해결하기 :

,227,293을210

나는 무엇이 진행되고 있는지를 알아보기 위해 특별한 @mode을 골랐습니다.

position()은 1부터 시작하고 XSLT 교과서에서 찾아 보는 "현재 노드 집합"에 따라 작동합니다.