如果其单元格包含“no”文本,则删除整行

时间:2015-11-30 14:08:00

标签: xml xslt

如果单元格包含值“no”,则使用xslt删除整行。 下面给出的工作簿xml代码:

<Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="4" x:FullColumns="1"
 x:FullRows="1">
<Row>
<Cell ss:StyleID="s23"><Data ss:Type="String">Name</Data></Cell>
<Cell ss:StyleID="s24"><Data ss:Type="String">Section</Data></Cell>
<Cell ss:StyleID="s24"><Data ss:Type="String">Aggregate</Data></Cell>
<Cell ss:StyleID="s25"><Data ss:Type="String">Result</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="s26"><Data ss:Type="String">AA</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="String">A</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="Number">68.0</Data></Cell>
<Cell ss:StyleID="s28"/>
</Row>
<Row>
<Cell ss:StyleID="s26"><Data ss:Type="String">BB</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="String">A</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="Number">99.0</Data></Cell>
<Cell ss:StyleID="s28"/>
</Row>
<Row ss:Height="14.0">
<Cell ss:StyleID="s29"><Data ss:Type="String">CC</Data></Cell>
<Cell ss:StyleID="s30"><Data ss:Type="String">C</Data></Cell>
<Cell ss:StyleID="s30"><Data ss:Type="Number">20.0</Data></Cell>
<Cell ss:StyleID="s31"><Data ss:Type="String">no</Data></Cell>
</Row>
</Table>

在上述编码中,第四行第四单元格包含“否”文本。需要使用xslt删除整行。

1 个答案:

答案 0 :(得分:1)

希望以下代码有效。

<xsl:stylesheet version="2.0" exclude-result-prefixes="ss"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="node() | @*" mode="#all">
        <xsl:copy>
            <xsl:apply-templates select="@* |node()" mode="#current"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="attribute[@name = 'String']/text()">
      <xsl:value-of select="replace(., '^.*no.*$\n*', '', 'm')"/>
    </xsl:template>

</xsl:stylesheet>