XSLT与某些属性不匹配

时间:2009-07-16 11:59:09

标签: xslt xpath

是否可以匹配属于属性子集的属性?例如,我想匹配除@ attr1和@ attr2之外的所有内容。有没有办法编写类似于以下的模板匹配语句,或者我是否采用了错误的方式?

<xsl:template match="NOT(@attr1) and NOT(@attr2)">      

由于

2 个答案:

答案 0 :(得分:7)

最简单的方法是使用两个模板:

<xsl:template match="@attr1|@attr2"/>
<xsl:template match="@*">
    ....
</xsl:template>

第一个模板将捕获对您要忽略的引用,并且只需 eat 它们。第二个将匹配其余属性。

答案 1 :(得分:2)

什么是可能的问题。使用以下内容:

<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']">
    ....
</xsl:template>

如果您想要更改属性或在缺少单个复制操作时添加属性,这将非常有用。另一个答案在这种情况下不起作用。 e.g。

  ...
  <xsl:copy>
     <xsl:attribute name="attr1">
        <xsl:value-of select="'foo'"/>
     </xsl:attribute>
     <xsl:apply-templates select="@*[local-name()!='attr1']|node()"/>
  </xsl:copy>
  ...