2009-07-16 105 views
5

是否可以匹配不属于属于属性子集的属性?例如,我想匹配除@ attr1和@ attr2之外的所有内容。有没有办法编写类似于以下内容的模板匹配语句,还是我以错误的方式解决这个问题?XSLT与某些属性不匹配

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

感谢

回答

7

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

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

第一个模板会抓住那些你想忽略参考,并简单地他们。第二个将匹配其余的属性。

+0

这很好。谢谢。 – Steve 2009-07-16 12:18:53

2

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

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

如果要更改属性或在缺少单个复制操作时添加该属性,此功能特别有用。另一个答案在这种情况下不起作用。例如

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