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(_at_)mulberrytech(_dot_)com
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
======================================================================
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--