XSL来过滤重复项

时间:2014-01-20 16:34:57

标签: xslt xslt-1.0

我正在尝试使用XSL生成PDF。但我不想要重复(它不应该背靠背显示),仅适用于value = Started。

下面是我显示查询结果的XSL片段(string_1列)。

    <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的新手。

1 个答案:

答案 0 :(得分: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>

我通过#&gt;突出显示了重要的部分。我已经注释掉了一个if语句,它似乎用于在启动的节点上进行不同的格式化。

preceding-sibling::*[1]为您提供最后处理的节点。它与作为当前节点的string_1进行比较。如果它不同(not()),它应该成为输出的一部分。