XSL模板匹配除了某些东西之外

时间:2017-06-22 07:51:40

标签: xslt xslt-1.0 xslt-2.0

我有一个xsl,其片段如下所示:

/lib/i386-linux-gnu/libc.so.6

但是,我需要它复制除了类型值为“RECORD”的组以外的所有组。我该怎么做呢?我可以使用XSL 1.0和2.0,首选1.0。源文件包含数千个组,具有4-5个不同的类型值。我希望代码只选择那些没有typevalue RECORD的组。

这是一个应该被过滤掉的示例组:

<xsl:template match="group">
<xsl:element name="group">
<xsl:copy-of select="*"/>
</xsl:element> 
</xsl:template>

非常感谢所有人和任何帮助!

2 个答案:

答案 0 :(得分:1)

如果您使用

<xsl:template match="/*">
  <xsl:copy>
    <xsl:copy-of select="//group[not(grouptype/typevalue[level = 0] = 'RECORD')]"/>
  </xsl:copy>
</xsl:template>

您复制那些没有group后代typevalue的{​​{1}}元素。

或者,如果您想使用身份转换模板复制所有内容,请反转条件以避免使用空模板复制要消除的元素

RECORD

答案 1 :(得分:0)

从字面上理解你的问题,该要求的最直接的XSLT表示是有两个模板规则:

<xsl:template match="*[everything()]" priority="10">
  ..
</xsl:template>

<xsl:template match="*[something()]" priority="20"/>

即匹配&#34;某事物&#34;的规则。什么也不做,以及一个匹配&#34;一切&#34;的低优先级规则。并做了一些事情。