This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Exception tests in XPath
- To: James Eberhardt <JEberhardt at extend dot com>
- Subject: Re: [xsl] Exception tests in XPath
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Sat, 17 Feb 2001 10:23:22 +0000
- CC: xsl-list at lists dot mulberrytech dot com, ovidiu at xemacs dot org
- Organization: Jeni Tennison Consulting Ltd
- References: <4621819DAF2BD411A20200508B641F43023E95B1@MAILSERVER>
- Reply-To: xsl-list at lists dot mulberrytech dot com
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