xsl-list
[Top] [All Lists]

[xsl] NMTOKENS and xsl:key

2007-01-07 15:57:50

I'm hoping someone on the list might be able to provide some
insight in how I might address the following issue.  I'm
using Saxon 8.8 and XSL 2.0 for developing a transform.  The
source document looks something like:

<document>
  <section>
    <item target="abc def ghi"/>
    <item target="foo bar"/>
    <item target="abc bar"/>
    <item target="def foo"/>
  </section>
  <section>
    <item target="abc"/>
    <item target="foo"/>
    <item target="ghi bar"/>
  </section>
</document>

The <section> and <item> elements are repeatable and the
target attribute is an NMTOKEN list.

Since the source document is quite large, I was hoping to
use xsl:key to index each token value in the item's target
attribute so I could query for all the items that might
contain a particular token value, e.g., "foo".

However, looking at xsl:key it seems to me that it will
only index the entire NMTOKEN list as a single value.  What
I'm trying to accomplish when I query for the token value
"foo", is that I want xsl:key to return the following node 
list:

  /document/section[1]/item[2]
  /document/section[1]/item[4]
  /document/section[2]/item[2]

correspondingly if I query for "abc" I want xsl:key to be
able to return the following node list:

  /document/section[1]/item[1]
  /document/section[1]/item[3]
  /document/section[2]/item[1]

does anybody know of anyway I can get xsl:key to index each
token in the NMTOKEN list for the target attribute?  I realize
I could write an XPath expression, but continually iterating
over a large document looking for different token values would 
be extremely slow which is one of the main reason why I was 
looking at using xsl:key.

Can you think of any alternate solutions to the problem.

BTW, the tokens in the list are *not* known in advance to
the transform.


Thanks, Andy.

--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>