[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi,
On 2/5/2012 10:37 PM, Graydon wrote:
Yes, and much nicer. Boo to explicit name testing.
Gotcha alert: that should be not(name(.) = ('xml:id','rend')). The != will always be true because every possible value of name(.) (any string at all) is != to either or both 'xml:id' and 'rend'.
But the main reason to dislike explicit name testing for this kind of thing is that it isn't namespace-safe, and is thus liable to break at inconvenient times, unlike the implicit name testing provided by path expressions. (If you really must, the XPath 2.0 node-name() function can help.)
Yes, you have to keep in mind that it's a set operation, so in both
attribute::* except (attribute::xml:id|attribute::rend)
the context for evaluating the second operand is the same as the context for the first, that is, we are excluding (or including) particular attribute of the context node, not of its attributes.
Re: [xsl] better way to say "all attrs except"?
Subject: Re: [xsl] better way to say "all attrs except"? From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Mon, 06 Feb 2012 12:29:55 -0500 |
Hi,
On 2/5/2012 10:37 PM, Graydon wrote:
On Sun, Feb 05, 2012 at 10:30:15PM -0500, Syd Bauman scripsit:For years I've used expressoins like @*[not(name(.)='xml:id' or name(.)='rend')] to ask for all of the attributes *except* xml:id= or rend=. And some time ago Jeni recommended essentially the same approach.[1] But I'm wondering if that isn't an XPath 1-ish way to do things, and if there isn't a nicer way to get the same set when using XSLT 2 (and thus can make use of XPath 2).
@* except (@xml:id,@rend)
is how that goes in XSLT 2.
Yes, and much nicer. Boo to explicit name testing.
(or @*[name(.) != ('xml:id','rend')] if you're preferential toward the predicate, but the except is the way to go, since that's an actual node test and keeps you out of the stringy land of names.)
Gotcha alert: that should be not(name(.) = ('xml:id','rend')). The != will always be true because every possible value of name(.) (any string at all) is != to either or both 'xml:id' and 'rend'.
But the main reason to dislike explicit name testing for this kind of thing is that it isn't namespace-safe, and is thus liable to break at inconvenient times, unlike the implicit name testing provided by path expressions. (If you really must, the XPath 2.0 node-name() function can help.)
The only tricky thing I've so far noticed about 'except' is that it doesn't always affect the implicit context of position() just how you would expect without the write-stuff-down-and-stare-at-it step.
Yes, you have to keep in mind that it's a set operation, so in both
attribute::* except (attribute::xml:id|attribute::rend)
attribute::type union attribute::rend @type|@rend
the context for evaluating the second operand is the same as the context for the first, that is, we are excluding (or including) particular attribute of the context node, not of its attributes.
Cheers, Wendell
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] better way to say "all at, Graydon | Thread | [xsl] Possible to create XSLT with , TW |
Re: [xsl] collecting a fileset with, Wendell Piez | Date | Re: [xsl] Entities, Wendell Piez |
Month |