2017-09-13 69 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。

檢查偶數或奇數工件的部分正常。問題是我無法得到第一部分的工作。

無論如何thx你的時間閱讀此。

+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],但沒有奏效。 – Sven

+0

'row [1]'意思是「一系列行中的第一個」,所以'prior-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

相關問題