This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: copy all attributes but one
- To: "Morris, Chris" <ChrisM at SNELLINGCORP dot COM>
- Subject: Re: [xsl] copy all attributes but one
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Thu, 18 Jan 2001 09:13:45 +0000
- CC: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Organization: Jeni Tennison Consulting Ltd
- References: <2B92A3D0D399D311BA7E00A0C90F8FDD88BE8E@mailgate.snellingcorp.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi Chris,
> I tried the same for attributes, but this doesn't work - it copies all
> attributes:
>
> <xsl:copy-of select="@*[not(attribute::DoNotCopyAttribute)]" />
In this XPath, you are saying:
get a list of all the attributes on the current node, and filter it
to include only those that do not have an attribute called
DoNotCopyAttribute
Now, attributes can't have attributes, so the predicate always returns
true, and you get all the attributes.
The self:: axis that you use to test the name of elements doesn't work
because self::* only matches elements, so you also can't do:
<xsl:copy-of select="@*[not(self::DoNotCopyAttribute)]" />
This will say:
get a list of all the attributes on the current node, and filter it
to include only those that are not themselves DoNotCopyAttribute
elements
Attributes can never be elements, so the predicate always returns
true, and you get all the attributes.
The best way around it that I've seen is to locate the relevant
attribute and test whether the current attribute is the same node. If
it is, then you don't want it; if it isn't, then you do. So:
<xsl:copy-of select="@*[generate-id(.) !=
generate-id(../@DoNotCopyAttribute)]" />
or:
<xsl:copy-of select="@*[count(.|../@DoNotCopyAttribute) !=
count(../@DoNotCopyAttribute)]" />
whichever you find easiest to read or is quicker with your processor.
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list