2015-03-28 5 views
0

У меня этот кодКак выбрать определенные узлы/слова из строки

for $sea in distinct-values (doc("mondial.xml")//island/tokenize(@sea,"\s")) 
let $count := count(doc("mondial.xml")//island[@sea = $sea]/tokenize(@sea,"\s")) 
let $seacount := concat($sea," ",$count) 
return $seacount 

Который возвращается ко мне

«море ArcticOcean 3 море Greenlandsea 0 море NorwegianSea 1 море BarentsSea 0

море-атлантическое 53 море-лабрадорSea 0 ... "и так далее.

Номер Как вы можете видеть $ count, а часть sea-XXX - это переменная $ sea. Теперь я застрял. Как-то вы выбираете $ sea с максимальным значением $ count всех подсчетов и отображением этого морского имени. Я попытался вещи, как добавить переменную макс $ в:

for $sea in distinct-values (doc("mondial.xml")//island/tokenize(@sea,"\s")) 
let $count := count(doc("mondial.xml")//island[@sea = $sea]/tokenize(@sea,"\s")) 
let $seacount := concat($sea," ",$count) 
$max := concat($sea," ",max($count)) 
return $max 

попытался также добавление заказ на $ подсчета (по убыванию) заявление, а затем возвращает первый узел:

for $sea in distinct-values (doc("mondial.xml")//island/tokenize(@sea,"\s")) 
let $count := count(doc("mondial.xml")//island[@sea = $sea]/tokenize(@sea,"\s")) 
let $seacount := concat($sea," ",$count) 
order by $count descending 
return $seacount[1] 

Am I приближается к этой неправильный путь или?

+1

Просьба также указать ввод, который вы используете, и предоставить фактический и ожидаемый результат запросов, которые вы отправили. –

ответ

0

Это вернет первый узел последовательности результатов для каждой итерации. В этом случае $seacount всегда является сплетением из 1 строки, поэтому вы всегда выбираете эквивалент ('sea-value count')[1], который представляет собой просто однострочное строковое значение. Чтобы выбрать только один общий фрагмент, оберните весь запрос в parens, чтобы создать последовательность всех значений для всех итераций, а затем выберите первый из них:

(for $sea in distinct-values (doc("mondial.xml")//island/tokenize(@sea,"\s")) 
let $count := count(doc("mondial.xml")//island[@sea = $sea]/tokenize(@sea,"\s")) 
let $seacount := concat($sea," ",$count) 
order by $count descending 
return $seacount)[1] 
+0

Это отлично поработало! благодаря –

Смежные вопросы