Опытный образец моего файла XML показан ниже:XQuery обратный текстовый узел, если он содержит данное ключевое слово
test.xml
<feed>
<entry>
<title>Link ISBN</title>
<libx:libapp xmlns:libx="http://libx.org/xml/libx2" />
</entry>
<entry>
<title>Link Something</title>
<libx:module xmlns:libx="http://libx.org/xml/libx2" />
</entry>
</feed>
Теперь я хочу написать XQuery, которая найдет все <entry>
элементы, которые в детстве имеют <libx:libapp>
. Затем для всех таких записей возвращается заголовок, если заголовок содержит заданное ключевое слово (например, ссылку). Итак, в моем примере xml-документа xquery должен вернуть «Link ISBN».
Мой образец XQuery показано ниже:
samplequery.xq (здесь DOC_NAME это файл XML показано выше, и libapp_matchkey это ключевое слово, например, как 'Link')
declare namespace libx='http://libx.org/xml/libx2';
declare variable $doc_name as xs:string external;
declare variable $libpp_matchkey as xs:string external;
let $feeds_doc := doc($doc_name)
for $entry in $feeds_doc/feed/entry
(: test whether entry has libx:libapp child and has "Link" in its title child :)
where ($entry/libx:libapp and $entry/title/text()[contains(.,$libapp_matchkey)])
return $entry/title/text()
Этот XQuery возвращается нуль вместо ожидаемого результата «Ссылка ISBN». Почему это?
Я заменил '$ food_doc' декларацию как'/', исправляется' $ libapp_matchkey' опечатка, и успешно запущенной его с входной выборки , – 2010-12-14 21:43:31
Хороший вопрос, +1. См. Мой ответ для короткого и естественного однострочного решения :) –