You don't say whether this is a schema-aware stylesheet. If it is, then the
type xs:NMTOKENS will be recognized, the typed value of @target will be a
sequence of tokens, and
<xsl:key match="item" use="@target"/>
will index the value of each token.
If it's not schema-aware then you need to split the value "by hand":
<xsl:key match="item" use="tokenize(@target, '\s+')"/>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Houghton,Andrew [mailto:houghtoa(_at_)oclc(_dot_)org]
Sent: 07 January 2007 22:58
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] NMTOKENS and xsl:key
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>
--~--
--~------------------------------------------------------------------
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>
--~--