2012-04-01 10 views
2

私の弱い英語のため申し訳ありません。XSL 1.0でソートされたレコードを列挙する方法は?

XSL 1.0でソートされたレコードを列挙する方法は?私のコードの断片 :

... 
<tbody> 
    <xsl:for-each select="/doc:resources/doc:record"> 
    <xsl:sort select="@id"/> 
    <xsl:choose> 
     <xsl:when test="(position() mod 2) = 0"> 
     <tr bgcolor="#C0C0C0"> 
      <td> 
      <xsl:number format="1"/> 
      </td> 
      <td> 
      <xsl:value-of select="@id"/> 
      </td> 
      <td> 
      <xsl:value-of select="."/> 
      </td> 
     </tr> 
     </xsl:when> 
     <xsl:otherwise> 
     <tr> 
      <td> 
      <xsl:number format="1"/> 
      </td> 
      <td> 
      <xsl:value-of select="@id"/> 
      </td> 
      <td> 
      <xsl:value-of select="."/> 
      </td> 
     </tr> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:for-each> 
</tbody> 
... 

誤った結果画面:

http://imglink.ru/pictures/01-04-12/92605b06b8b2c2670bba868c61288e9b.jpg

よろしく

答えて

2
<xsl:for-each select="/doc:resources/doc:record"> 
    <xsl:sort select="@id"/> 
    <tr> 
    <xsl:if test="position() mod 2 = 0"> 
     <xsl:attribute name="bgcolor">#C0C0C0</xsl:attribute> 
    </xsl:if> 
    <td> 
     <xsl:value-of select="position()" /> 
    </td> 
    <td> 
     <xsl:value-of select="@id"/> 
    </td> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
    </tr> 
</xsl:for-each> 
0

間違った数字の理由はxsl:numberは(知らないということです動的)ソートを行い、ソートされていない元のドキュメントの構造を使用します。

ここにはposition()を使用した完全で簡潔で簡単な解決策があります。これに加えて、何の条件付き命令(xsl:choosexsl:whenxsl:otherwise、XSLは:if`)すべてで使用されていません。この変換は、次のXMLドキュメントに適用される

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:doc="xxx"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/*"> 
    <html> 
     <table> 
     <xsl:apply-templates select="*"> 
      <xsl:sort select="@id"/> 
     </xsl:apply-templates> 
    </table> 
    </html> 
</xsl:template> 

<xsl:template match="doc:record"> 
    <xsl:variable name="vColor" select= 
    "substring('C0C0C0FFFFFF', 6*(position() mod 2)+1, 6)"/> 

    <tr bgcolor="#{$vColor}"> 
      <td> 
       <xsl:value-of select="position()"/> 
      </td> 
      <td> 
       <xsl:value-of select="@id"/> 
      </td> 
      <td> 
       <xsl:value-of select="."/> 
      </td> 
    </tr> 
</xsl:template> 
</xsl:stylesheet> 

は(何も提供されませんでした! ):

<doc:resources xmlns:doc="xxx"> 
    <doc:record id="dadasd"> 
    some value1 
    </doc:record> 
    <doc:record id="hkjhkhkhk"> 
    some value2 
    </doc:record> 
    <doc:record id="xvxvxvxv"> 
    some value3 
    </doc:record> 
    <doc:record id="afasf"> 
    some value4 
    </doc:record> 
    <doc:record id="iuyiyuiy"> 
    some value5 
    </doc:record> 
</doc:resources> 

希望、正しい結果が製造される:

<html xmlns:doc="xxx"> 
    <table> 
     <tr bgcolor="#FFFFFF"> 
     <td>1</td> 
     <td>afasf</td> 
     <td> 
       some value4 

     </td> 
     </tr> 
     <tr bgcolor="#C0C0C0"> 
     <td>2</td> 
     <td>dadasd</td> 
     <td> 
      some value1 

     </td> 
     </tr> 
     <tr bgcolor="#FFFFFF"> 
     <td>3</td> 
     <td>hkjhkhkhk</td> 
     <td> 
       some value2 

     </td> 
     </tr> 
     <tr bgcolor="#C0C0C0"> 
     <td>4</td> 
     <td>iuyiyuiy</td> 
     <td> 
       some value5 

     </td> 
     </tr> 
     <tr bgcolor="#FFFFFF"> 
     <td>5</td> 
     <td>xvxvxvxv</td> 
     <td> 
       some value3 

     </td> 
     </tr> 
    </table> 
</html> 
+0

よろしくお願いいたします。私は最初に提供されたオプションを試しました - それは正しい仕事です。 –

+0

@ブッシュ:私の答えがあなたに役立ってうれしいです。ベストアンサーを受け入れることを検討してください(回答の横にあるチェックマークをクリックしてください)。 –

+0

私は最近登録されました。私のレベルが15に達していない間、私は答えのバージョンを投票することを許可しません:((( –

関連する問題