我有以下XML
<section>
<object>
<field name="First Source" />
<tableSection
propertyCount="1"
rowCount="1">
<tableProperty height="0"
width="570"
visible="true">
<property name="commit" />
</tableProperty>
<tableRow height="0"
width="0">
<tableCell value="Value First Source" />
</tableRow>
</tableSection>
</object>
<object>
<field name="Another Source" />
<tableSection
propertyCount="1"
rowCount="1">
<tableProperty height="0"
width="570"
visible="true">
<property name="commit" />
</tableProperty>
<tableRow height="0"
width="0">
<tableCell value="Invalid Value" />
</tableRow>
</tableSection>
</object>
</section>
,并具有如下所示的xslt
<xsl:template match="tableRow">
<xsl:variable name="rowNodePosition">
<xsl:value-of select="position()"/>
</xsl:variable>
<tr allowDblCl="true" valign="top" height="50px">
<td>
<b>Row:</b>
<xsl:value-of select="$rowNodePosition"/>
<br/>
<xsl:for-each select="tableCell" >
<xsl:variable name="currPosition">
<xsl:value-of select="position()"/>
</xsl:variable>
<xsl:if test="@value != ''">
<b>
<xsl:value-of select="../../tableProperty[position() = $currPosition]/property/@name"/>: </b>
<xsl:value-of select="@value"/>
<br/>
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr>
<td colspan="4" height="15px"> </td>
</tr>
</xsl:template>
这将获取所有的'tablRow'。但是我需要排除具有字段名称=“另一个来源”的tableRows,即,如果对象节点具有名为“另一个来源”的“字段”,则排除节点tableSection的tableRow
答案 0 :(得分:2)
如您所写,您想排除每个 tableRow 元素,并使用 具有特定值的相应字段名称。
如果要在XSLT中排除某些元素,通常的规则是编写一个 该元素的空模板。
此元素的名称为 tableRow ,但是要缩小匹配范围, 您必须添加以下谓词:
因此添加:
<xsl:template match="tableRow[../../field/@name = 'Another Source']"/>
您的XSLT脚本,以实现您想要的。
有关工作示例,请参见http://xsltransform.net/ei5PwjS