2014-01-20 63 views
0

我正在嘗試使用XSL生成PDF。但我不想重複(它不應該顯示爲背對背),只適用於value = Started。XSL過濾重複項

下面是顯示查詢結果(string_1列)的XSL代碼片段。

<xsl:for-each select="root/query1/row"> 
          <fo:table-row height="0.9cm"> 
          <xsl:if test="event_name = 'Started'"> 
            <fo:table-cell border-style="solid" border-width="0.5pt" 
            number-columns-spanned="5"> 
             <fo:block font-family="Courier" color="Blue" font-size="10pt" font-weight="normal" text-align="center"> 
              <xsl:value-of select="string_1"/> 
             </fo:block> 

            </fo:table-cell>  
           </xsl:if> 

    </xsl:for-each> 

例如, 我QUERY1可以給類似的結果:

STRING_1

======

開始

正在進行

完全

開始

開始

正在進行

正在進行

完全

我的PDF應該

=========

開始

正在進行

完全

開始

正在進行

正在進行

完全

很抱歉,如果我沒有提供多少信息。我是XSL新手。

+3

您需要提供生成所顯示輸出的輸入XML。 –

+0

您有2個「進行中」行,並在所需結果中連續排列。這當然與要求相矛盾? – StuartLC

+0

給定的XSL不正確。沒有關閉'' –

回答

0

我不知道,你怎麼輸入XML完全相同的樣子,但你應該能夠從這種XML

<root> 
<query1> 
<row> 
<string_1>Started</string_1> 
</row> 
<row> 
<string_1>In Progress</string_1> 
</row> 
<row> 
<string_1>In Progress</string_1> 
</row> 
<row> 
<string_1>In Progress</string_1> 
</row> 
<row> 
<string_1>Complete</string_1> 
</row> 
</query1> 
</root> 

這XSLT適應:

<xsl:template match="/"> 
    <xsl:for-each select="root/query1/row"> 
#> <xsl:if test="not(preceding-sibling::*[1]=string_1)"> 
     <fo:table-row height="0.9cm"> 
      <!-- <xsl:if test="event_name = 'Started'"> --> 
      <fo:table-cell border-style="solid" border-width="0.5pt" number-columns-spanned="5"> 
      <fo:block font-family="Courier" color="Blue" font-size="10pt" font-weight="normal" text-align="center"> 
       <xsl:value-of select="string_1" /> 
      </fo:block> 
      </fo:table-cell> 
      <!-- </xsl:if> --> 
     </fo:table-row> 
    #> </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 

我已經強調了#>重要的行。我已經評論了其中一個if語句,它似乎是因爲在開始的節點上做了不同的格式化。

preceding-sibling::*[1]爲您提供最後處理的節點。它與當前節點string_1進行比較。如果不同(not()),它應該成爲輸出的一部分。