xsl-list
[Top] [All Lists]

RE: [xsl] Filtering sequences of atomic types

2008-11-26 15:44:09
An expression that starts with "/" selects nodes within the current
document, that is, the document that contains the context node. If there is
no context node, that is, if the context item is an atomic value, then
there's no current document and the system doesn't know which document you
want to search.

So you have to bind a variable to the document outside the predicate, for
example

<xsl:variable name="doc" select="/"/>

and then you can do $string-sequence[. = $doc//@xml:id]

Converting the strings to text nodes will get rid of the type error, but it
won't solve the problem, because //@xml:id will only look in the document
that contains the text node being tested.

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Christoph LANGE [mailto:ch(_dot_)lange(_at_)jacobs-university(_dot_)de] 
Sent: 26 November 2008 20:34
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Filtering sequences of atomic types

Dear all,

  I'm trying to filter a sequence using a predicate that 
involves a node set.
What I actually want to do is something like

$string-sequence[. = //@xml:id]

i.e. get all items of a sequence that occur as an xml:id 
attribute somewhere in the document.

As that gives me the error message "XPTY0020: Cannot select a 
node here: the context item is an atomic value" (with Saxon 
9.1), I tried

$string-sequence[. = (for $n in (//@xml:id) return xs:string($n))]

or even

('foo', 'bar')[. = (for $n in (//@name) return 'foo')]

where the latter should actually return something like 
('foo', 'foo', ...), and ('foo', 'bar')[. = ('foo', 'foo')] 
works, of course.

My current workaround is translating the string sequence to a 
sequence of text nodes, but why doesn't it work with a 
sequence of atomic types?

Thanks for any help,

Christoph

--
Christoph Lange, Jacobs Univ. Bremen, 
http://kwarc.info/clange, Skype duke4701




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

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