У меня есть следующие XML-схемы базы данных фильма:XQUERY с несколькими поисковыми полями
<movies>
<movie>
<title>A History of Violence</title>
<year>2005</year>
<country>USA</country>
<genre>Crime</genre>
<summary>Tom Stall, a humble family man and owner of a
popular neighborhood restaurant, lives a quiet but
fulfilling existence in the Midwest. One night Tom
foils a crime at his place of business and, to his
chagrin, is plastered all over the news for his
heroics. Following this, mysterious people follow
the Stalls' every move, concerning Tom more than
anyone else. As this situation is confronted, more
lurks out over where all these occurrences have
stemmed from compromising his marriage, family
relationship and the main characters' former
relations in the process.</summary>
<director>
<last_name>Cronenberg</last_name>
<first_name>David</first_name>
<birth_date>1943</birth_date>
</director>
<actor>
<first_name>Vigo</first_name>
<last_name>Mortensen</last_name>
<birth_date>1958</birth_date>
<role>Tom Stall</role>
</actor>
<actor>
<first_name>Maria</first_name>
<last_name>Bello</last_name>
<birth_date>1967</birth_date>
<role>Eddie Stall</role>
</actor>
<actor>
<first_name>Ed</first_name>
<last_name>Harris</last_name>
<birth_date>1950</birth_date>
<role>Carl Fogarty</role>
</actor>
<actor>
<first_name>William</first_name>
<last_name>Hurt</last_name>
<birth_date>1950</birth_date>
<role>Richie Cusack</role>
</actor>
</movie>
</movies>
я создал теперь искать поля для актеров первого/last_name; жанр; страна; год и роль.
Но проблема в том, что она работает только с годом и жанром.
Если я использую
жанр или год: я получить правильные результаты
last_name; first_name; страна; Роль: Я не получаю никакого результата
Я предполагаю, что есть что-то TODO с несколькими актерами и множеством элементов стран, но я couldn't понять, как ее решить.
Вот мой XQUERY код:
xquery version "3.0";
(: :declare namespace util="http://exist-db.org/xquery/util";:)
declare option exist:serialize "method=xhtml media-type=text/html indent=yes";
let $year := lower-case(request:get-parameter('year', ''))
let $genre := request:get-parameter('genre', '')
let $first_name := request:get-parameter('first_name', '')
let $last_name := request:get-parameter('last_name', '')
let $country := request:get-parameter('country', '')
let $role := request:get-parameter('role', '')
let $movies := collection('/db/Movie/data')/movies/movie[if(not($genre)) then xs:boolean(1) else equals(genre, $genre)][if(not($year)) then xs:boolean(1) else equals(year, $year)][if(not($country)) then xs:boolean(1) else equals(//country, $country)][if(not($first_name)) then xs:boolean(1) else equals(//actor/first_name, $first_name)][if(not($last_name)) then xs:boolean(1) else equals(//actor/last_name, $last_name)][if(not($role)) then xs:boolean(1) else equals(//actor/role, $role)]
return
<html>
<head>
</head>
<body>
<h1>Search results:</h1>
<ol>{
for $movie in $movies
let $title := $movie/title/text()
let $year := $movie/year/text()
return
<li>{$title} ({$year})</li>
}</ol>
</body>
</html>
Заранее спасибо! Greets
Спасибо, я исправил опечатку, но она не работает :(Теперь я получаю также для last_name никакого результата больше. – user3181473
@ user3181473: Исправлено удаление этих // перед // страной и т. Д. Они не нужны. Они не должны вредить, думал я, но не используя // (почти) всегда лучше .. – grtjn