tags:

views:

397

answers:

1

Is it possible to match attributes that do not belong to a subset of attributes? For example, I would like to match everything but @attr1 and @attr2. Is there a way to write a template match statement similar to the following, or am I going about this the wrong way?

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

Thanks

+4  A: 

The easiest way would be to use two templates:

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

The first template will catch the references to those you want to ignore, and simply eat them. The second will match the remaining attributes.

lavinio
This worked great. Thank you.
Steve
How about if at some other point in the script I would like to handle the attributes that were excluded. Do you know if that is still possible? Basically I have hundreds of attributes that I need to match on, all requiring the same action, and only a very small subset require special handling. So I would like to exclude the ones that need special handling, until I decide to handle them. I basically just need to print out the attribute names, and the assigned value.
Steve
I actually solved the problem using modes combined with your solution above. <xsl:template match="@attr1|@attr2" mode="common" /> <xsl:template match="@*" mode="common"> .... </xsl:template> <xsl:template match="@attr1|@attr2" mode="styles"> ... </xsl:template>
Steve