2017-09-13 11 views
0

私のテストケースでこれを使用するために以前の属性を取得することに問題があります。現在の属性が以前の属性と同じである場合のXSLテスト

これが最終結果の仕組みです。

<rows> 
    <row id="1"> 
     <cell>Advances RTF - Regul ILIAS</cell> 
    </row> 
    <row id="2"> 
     <cell style="color: RED">Advances RTF - Regul ILIAS</cell> 
    </row> 
    <row id="3"> 
     <cell style="color: GREEN">Advances RTF - Regul ILIAS</cell>  
    </row>  
    </row> 
    <row id="4"> 
     <cell>Analysis of the consumption of paymaster's advances</cell>  
    </row> 
    <row id="5"> 
     <cell style="color: GREEN">Analysis of the consumption of paymaster's advances</cell>  
    </row> 
    <row id="6"> 
     <cell>Analytic Image</cell>  
    </row> 
    <row id="7"> 
     <cell style="color: GREEN">Analytic Image</cell>  
    </row> 
    <row id="8"> 
     <cell>Analytic Image - System</cell> 
    </row> 
    <row id="9"> 
     <cell style="color: GREEN">Analytic Image - System</cell> 
    </row> 
</rows> 

私はこのように見えるXMLファイルから始めます。私は余分な属性をたくさん削除しました。なぜなら、ここに示すのは関係がなかったからです。

-<dbqueries> 
-<dbquery id="algemeen_overview_1_lijn"> 
    -<rows> 
     <row LRF_DESCRIPTION="Advances RTF - Regul ILIAS" /> 
     <row LRF_DESCRIPTION="Advances RTF - Regul ILIAS" /> 
     <row LRF_DESCRIPTION="Advances RTF - Regul ILIAS" /> 
     <row LRF_DESCRIPTION="Analysis of the consumption of paymaster's advances" /> 
     <row LRF_DESCRIPTION="Analysis of the consumption of paymaster's advances" /> 
     <row LRF_DESCRIPTION="Analytic Image" /> 
     <row LRF_DESCRIPTION="Analytic Image" /> 
     <row LRF_DESCRIPTION="Analytic Image - System" /> 
     <row LRF_DESCRIPTION="Analytic Image - System" /> 
    </rows> 
</dbquery> 

私はXLSファイルを使用していたい結果を得るために。

<xsl:template match="/">  
    <rows> 
    <xsl:apply-templates select="//dbquery[@id='algemeen_overview_1_lijn']/rows/row"/> 
    </rows> 
</xsl:template> 

<xsl:template match="//dbquery[@id='algemeen_overview_1_lijn']/rows/row"> 
    <xsl:element name="row"> 
     <xsl:attribute name="id"> 
      <xsl:value-of select="position()"/> 
     </xsl:attribute>      
      <xsl:choose> 
       <xsl:when test="current()/@LRF_DESCRIPTION != preceding-sibling::row[@LRF_DESCRIPTION]"> 
        <cell> 
         <xsl:value-of select="@LRF_DESCRIPTION"/> 
        </cell> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:choose> 
         <xsl:when test="position() mod 2 = 0"> 
          <cell style="color: #EBF3FF;"> 
           <xsl:value-of select="@LRF_DESCRIPTION"/> 
          </cell> 
         </xsl:when> 
         <xsl:otherwise> 
          <cell style="color: #FFFFFF;"> 
           <xsl:value-of select="@LRF_DESCRIPTION"/> 
          </cell> 
         </xsl:otherwise> 
        </xsl:choose> 
       </xsl:otherwise> 
      </xsl:choose>  
    </xsl:element> 
</xsl:template> 

この選択肢は次のとおりです。 LRF_DESCRIPTION!=以前のlrf_description の場合、スタイルカラーのないLRF_descriptionを表示してください。

これが偶数か奇数位置(行番号)である場合LRF_DESCRIPTION =前lrf_description は、次にチェックする それもいた場合、それは不均一の場合は、緑色にLRF_descriptionを示す赤色 にLRF_descriptionを示しているが。

偶数または奇数をチェックする部分がうまく動作します。問題は、私が最初の部分を働かせることができないということです。

とにかくこれを読んでいただきありがとうございます。

+0

にこれは*質問をグループ化*のように見えます。 XSLT 2.0を使用できますか? –

答えて

0

あなたは解決策に近づいていました。次の行は、属性処理をLRF_DESCRIPTIONに固定し、最初の項目の例外を追加しました。
変更最初<xsl:when test="..."条件

current()/@LRF_DESCRIPTION != preceding-sibling::row[1]/@LRF_DESCRIPTION or count(preceding-sibling::row) = 0 
+0

Thx。 Orの解決策は、私が最初の行を失ったという問題を取り除きました。 「回答は有用です」をクリックしたいと思っていましたが、私は低所得者になってしまいました。 ただ1つの質問、行[1]は前の1行を意味しますか?その質問の理由は、まず私は行[position() - 1]で試してみましたが、それはうまくいきませんでした。 – Sven

+0

'行[1]'は「行の最初の行」を意味するので、 'preceding-sibling :: row [1]'は「先行行の兄弟のシーケンスの最初」を意味します。多くを説明している – zx485

+0

。情報をありがとう。 – Sven

0

<xsl:when test="current()/@LRF_DESCRIPTION != preceding-sibling::row[@LRF_DESCRIPTION]"><xsl:when test="@LRF_DESCRIPTION != preceding-sibling::row[1]/@LRF_DESCRIPTION">に変更してみて、XML構造と属性比較の意味合いを確認してください。

+0

これは確かに非常に良い解決策です。非常に最初の行だけを失った。ソリューション@ zx485もその問題を解決しました。答えのために – Sven

関連する問題