Subject: Re: [xsl] copy all attributes but one From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Thu, 18 Jan 2001 09:13:45 +0000 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] copy all attributes but one, Morris, Chris | Thread | RE: [xsl] copy all attributes but o, Morris, Chris |
Re: [xsl] write out '&' instead of , Jeni Tennison | Date | [xsl] variable comparison, kapil |
Month |