2013-05-16 3 views
0

나는이 다음 XSLT 조각이 있습니다XSLT를 사용하여 ID를 올바르게 설정하는 방법은 무엇입니까?

<table border="1" id ="test"> 
    <xsl:for-each select= "TestSuite/TestCase"> 

       <tr> 
       <xsl:attribute name="id"> 
         <xsl:value-of select="count(preceding-sibling::*)"/> 
       </xsl:attribute> 
       <b><xsl:value-of select="@name"/></b> 

       </tr> 

       <xsl:for-each select="Verification|Command"> 
         <tr> 
         <xsl:attribute name="id"> 
          <xsl:value-of select="count(preceding-sibling::*)"/> 
         </xsl:attribute> 
         <xsl:choose> 
           <xsl:when test="contains(name() , 'Verification')"> 

           <td>Verification <xsl:value-of select="@type"/></td> 
           <td><xsl:value-of select="@status"/></td> 
         </xsl:when> 
         <xsl:when test="contains(name() , 'Command')"> 
           <td>Command <xsl:value-of select="@type"/></td> 
           <td><xsl:value-of select="@status"/></td> 
         </xsl:when> 
         </xsl:choose> 

         </tr> 


       </xsl:for-each> 

     </xsl:for-each> 
     </table> 

가 지금은 단순히 한 후이 모든 내부 루프는 0으로 ID 계산을 시작하는 등 문제가 있음을, 각 테이블은 0으로 시작하는 ID를 행주고 싶습니다를 다시. 이 문제를 어떻게 해결할 수 있습니까? 내 HTML 페이지에는 하나의 테이블 만 표시되므로 모든 tr이 형제가되어야합니다.

+0

연속 정수를 사용해야합니까? 그렇지 않다면 바깥 쪽 루프의 id를 내부 루프의 id와 연결할 수 있습니다 ('0-0', '0-1', '0-2', '1-0', '1-1'등) – MiMo

+0

예, id를 사용하여 요소로 스크롤해야하기 때문입니다. XML이 어떻게 생겼는지 미리 알 수 없기 때문에 연속적이면 좋을 것입니다. –

답변

0

이런 일에 대해 어떻게 :

<xsl:template match="something"> 
    <table border="1" id ="test"> 
     <xsl:apply-templates select="TestSuite/TestCase | 
            TestSuite/TestCase/*[self::Verification or 
                 self::Command]" /> 
    </table> 
    </xsl:template> 

    <xsl:template match="TestSuite/TestCase"> 
    <tr id="{position()}"> 
     <td colspan="2"> 
     <b> 
      <xsl:value-of select="@name"/> 
     </b> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="TestCase/Verification | TestCase/Command"> 
    <tr id="{position()}"> 
     <td> 
     <xsl:value-of select="concat(local-name(), @type)"/> 
     </td> 
     <td> 
     <xsl:value-of select="@status"/> 
     </td> 
    </tr> 
    </xsl:template> 
+0

와우 대단한 답변은 정말 감사합니다. –

0

대신의 위치에 id을 내놓고, 단지 사용 generate-id() :

id="{generate-id()}" 

이는 고유하지 않을뿐만 아니라, 유효한 될 것입니다 ID 유형 값입니다.