Re: [xsl] most efficient way to check for a group of tags?

Subject: Re: [xsl] most efficient way to check for a group of tags?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Wed, 02 Mar 2005 16:36:35 -0500
Hi Sebastian,

At 03:37 PM 3/2/2005, you wrote:
I've got a template that needs to know the if it
contains only 1 of a specific group of tags when it's
within a "content" tag, and I've got this condition to
do this:

count(ancestor::content[1]/child::*[self:tag1 or
self:tag2 or self:tag3 ....]) = 1

Now I need to check for about 15 different tags; is
there a more efficient way to do this sort of check?

I have my doubts about its being more efficient (from several points of view it is likely to be less so), but a more explicit XSLT approach might at least *read* a bit more accessibly (whatever a processor does with it) --

<xsl:variable name="tags-count">
  <xsl:for-each select="ancestor::content[1]">
    <xsl:value-of select="count(tag1|tag2|tag3|etc)"/>

Then number($tags-count) is your count (remember $tags-count itself is a result tree fragment, which here contains a single text node with the value).

Another way of simplifying this is to preprocess your input, for example by adding an attribute flag to all the element types you want to count. Then you collect them using that flag, instead of by name.

The schema-awareness feature of XSLT 2.0 that Mike mentioned in connection with this might be considered to be an extremely sophisticated version of the last approach -- the schema annotates the document with type information, which you can then use in your transform.


Celebrate Yahoo!'s 10th Birthday!
Yahoo! Netrospective: 100 Moments of the Web

Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.      
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