2017-09-13 143 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