Re: [xsl] Exception tests in XPath

Subject: Re: [xsl] Exception tests in XPath
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Sat, 17 Feb 2001 10:23:22 +0000
Hi James,

> <xsl:copy-of select="@*" />
> will copy all the attributes of a tag.
>
> <xsl:copy-of select="@type|@language" />
> will copy only the 'type' and 'language' attributes.
>
> How do I get a statement that will select ALL the attributes except a
> specific one?

If the attribute that you want to weed out is unprefixed (i.e. it's in
the null namespace) then you can use:

  <xsl:copy-of select="@*[local-name() != 'type']" />

to copy all but the 'type' attribute.  It selects all attributes (@*)
and then filters out all those whose local name equals 'type'.

If the attribute has a prefix (i.e. it's in a namespace) then you
should use:

  <xsl:copy-of select="@*[count(.|../@xml:lang) !=
                          count(../@xml:lang)]" />

to copy all but the 'xml:lang' attribute.  Alternatively, you can use:

  <xsl:copy-of select="@*[generate-id() !=
                          generate-id(../@xml:lang)]" />

which does exactly the same thing.  It selects all attributes and then
filters out those that *are* the xml:lang attribute.  Or, if you want
to, you can use:

  <xsl:copy-of select="@*[not(local-name() = 'lang' and
                              namespace-uri() =
                                 'http://www.w3.org/XML/1998/namespace')]" />

This selects all attributes and filters out those whose local name is
lang in the XML namespace.
                          
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