XSL测试当前属性是否与先前属性

时间:2017-09-13 12:26:34

标签: xml xslt

我在测试用例中遇到上一个属性时遇到了麻烦。

这是最终结果的方式。

<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。

检查偶数或奇数工件的部分。问题是我不能让第一部分工作。

无论如何,你的时间阅读这个。

2 个答案:

答案 0 :(得分:0)

尝试将<xsl:when test="current()/@LRF_DESCRIPTION != preceding-sibling::row[@LRF_DESCRIPTION]">更改为<xsl:when test="@LRF_DESCRIPTION != preceding-sibling::row[1]/@LRF_DESCRIPTION">,以便在XML结构和属性比较方面有所作为。

答案 1 :(得分:0)

你接近解决方案。以下行修复了LRF_DESCRIPTION的属性处理,并为第一个项添加了例外 将第一个<xsl:when test="..."条件更改为

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