[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: copy all attributes but one
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|