function abc ($results as element()*, $element as xs:string)
{
for $g in distinct-values($results//*[name() = $element]) (: $results//genre :)
let $c := //$results[? = $g] (: //$results[genre=$g] :)
}
, что должно быть на месте "? в переменной «$ с»
Это ошибка синтаксиса писать:
//$results
Этот вопрос является довольно расплывчатым, но мне кажется, что вы хотите, чтобы сгруппировать элементы , содержащиеся в $results
в соответствии с их genre
(или любым другим именем элемента, определяемым $element
- BTW это имя сосет (элемент не является строкой) - лучше использовать $elementName
).
Другой озаботившема является, что вы проверяете полные поддерева увенчанных каждым из элементов в $results
- это означает, что они могут иметь несколько genre
(или любые другие) потомков.
Чтобы завершить мое угадывание гулянки, мне кажется, что вы хотите:
function grouping-Keys ($elems as element()*, $subElementName as xs:string) as element()*
{
for $g in distinct-values($elems//*[name() = $subElementName ])
return
$elems[//*[name() = $subElementName ] = $g][1]
}
Если известно, что $subElementName
этого имя ребенка, что любой из элементов в $elems
есть , то выше, должны быть лучше записать в виде:
function grouping-Keys ($elems as element()*, $childElementName as xs:string) as element()*
{
for $g in distinct-values($elems/*[name() = $childElementName ])
return
$elems[/*[name() = $subElementName ] = $g][1]
}
Оба указанных выше функций возвращает один элемент в расчете на одну (отдельного значения) жанра (или whatev э). Если известно (гарантировано), что каждый элемент в $elems
имеет ровно один дочерний (потомственный) с именем жанр (или что-то еще), то результаты этих функций не являются избыточными.
Хороший вопрос, +1. Ваш вопрос не очень хорошо указан, но в своем ответе я попытался угадать и изменить код на то, что может быть полезно. :) – 2010-12-16 03:28:31
Приятная вещь о комментариях XQuery заключается в том, что у вас есть смайлики во всем мире ... – LarsH 2010-12-16 16:48:22