[xquery-talk] trying to retrieve element value
Michael Dyck
jmdyck at ibiblio.org
Wed Jan 6 12:09:28 PST 2016
Hi Mary,
In your queries, the where clause
where /samhsa-doc//article-title[@id="AVD210_art1"]
means (roughly):
where some document in the collection has
an <article-title> with id="AVD210_art1"
Apparently, there *is* such a document in your collection,
so the where-condition is always true, *regardless* of what's
been bound to $mlid in the 'for' clause. That is, your second query is
effectively equivalent to:
for $mlid in /samhsa-doc
where true()
return $mlid//system-pub-id
or just:
for $mlid in /samhsa-doc
return $mlid//system-pub-id
which is why you're getting a result item for each document in the database.
Instead, you want to make the 'where' condition examine the document that's
currently in hand, i.e. the one bound to $mlid in the 'for' clause. In your
second query, in the where clause, just change "/samhsa-doc" to "$mlid", and
I think it'll work:
for $mlid in /samhsa-doc
where $mlid//article-title[@id='AVD210_art1']
return $mlid//system-pub-id
(Incidentally, since this is a fairly simple use of for-where-return, you
could replace it with just a path expression, e.g.
/samhsa-doc[.//article-title[@id='AVD210_art1']]//system-pub-id
would work, I think.)
-Michael
More information about the talk
mailing list