Функция fn:min не работает
Итак, у меня есть этот XML:
<?xml version="1.0" encoding="UTF-8" ?>
<dvdCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://teste1.org"
xsi:noNamespaceSchemaLocation="http://teste1.org dvds.xsd">
<dvd>
<id>1</id>
<title>Pulp Fiction</title>
<release-year>1994</release-year>
<director>Quentin Tarantino</director>
<actors>
< actor type="star" gender="male">John Travolta</actor>
<actor type="star" gender="female">Uma Thurman</actor>
<actor type="co-star" gender="male">Samuel L. Jackson</actor>
</actors>
<genres><genre>Crime</genre><genre>Drama</genre></genres>
</dvd>
<dvd>
<id>2</id>
<title>Green mile</title>
<release-year>1993</release-year>
<director>Quentin Tarantino</director>
<actors>
<actor type="star" gender="male">Tom hanks</actor>
</actors>
<genres><genre>Crime</genre></genres>
</dvd>
<dvd>
<id>3</id>
<title>Titanic</title>
<release-year>1999</release-year>
<director>Quentin Tarantino</director>
<actors>
<actor type="star" gender="male">Tom hanks</actor>
</actors>
<genres><genre>Crime</genre></genres>
</dvd>
</dvdCollection>
Я пытаюсь получить минимальный год выпуска в жанре Crime. Это мой запрос, но по какой-то причине он возвращает все годы выпуска примерно так:
1994 1993 1999
Я помещаю последовательность как это внутри fn: min
<release-year xmlns="http://teste1.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1994</release-year>
<release-year xmlns="http://teste1.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1993</release-year>
<release-year xmlns="http://teste1.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1999</release-year>
У меня сложилось впечатление, что fn: min сгладит мою последовательность, что я делаю не так, может кто-нибудь объяснить, как работает эта функция?
запрос:
declare default element namespace "http://teste1.org";
let $dvds := fn:doc("dvdcollection.xml")//dvd
for $dvd in $dvds//genre[.="Crime"]
let $min := fn:min($dvd/../../release-year)
return $min
Заранее спасибо!!
1 ответ
Для всех, у кого есть подобная ошибка: Хорошо, так что fn: min делает то, что я сделал, проблема была в том, что я применял fn: min к каждому элементу из-за инструкции for. Это не то, что я хотел, я хотел сгруппировать последовательность лет выпуска, так что это было довольно просто, что мне нужно было сделать!
declare default element namespace "http://teste1.org";
let $dvds := fn:doc("dvdcollection.xml")//dvd
**let** $dvd := $dvds//genre[.="Crime"]
let $min := fn:min($dvd/../../release-year)
return $min
Просто замените это "для" на "пусть", и ошибка устранена.