使用XSLT,当列只包含“Jack”时,我需要删除一个完整的表行,我做了它,但它在匹配后删除了所有行
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template name="ident" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tr">
<xsl:if test="../../tr/td[text()='Jack']">
<xsl:call-template name="ident" />
</xsl:if>
</xsl:template>
<table>
<th>
<td>Contestant</td>
<td>Score</td>
<td>Country</td>
</th>
<tr>
<td>Jack</td>
<td>0.00</td>
<td>AUS</td>
</tr>
<tr>
<td>Jill</td>
<td>-</td>
<td>-</td>
</tr>
</table>
答案 0 :(得分:1)
使用当前表达式,../../tr
实际上会查找当前行的“祖父母”(即tr
的父级)兄弟的table
元素,我猜这不是什么你想要的。
如果要删除行,如果任何列包含单词jack,则模板应如下所示。
<xsl:template match="tr">
<xsl:if test="not(td[text()='Jack'])">
<xsl:call-template name="ident" />
</xsl:if>
</xsl:template>
或者,或许更好的是,有一个模板可以删除任何带插孔的行,就像这样......
<xsl:template match="tr[td/text()='Jack']" />