Тестовый образец моего xml-файла показан ниже:
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 -ключевое слово, такое как «Ссылка»)
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».Почему это?