Мне нужно написать функцию, которая принимает последовательность элементов «тега» в форме:
<tag type="markupType" value="topic"/>
<tag type="concept" value="death"/>
...
и превращает их в атрибуты вида
data-markupType="topic"
data-concept="death"
Пока у меня есть следующая функция:
declare function local:tagsToAttrs($tags as element()*) as attribute()*
{
for $tag in $tags
let $type := $tag/string(@type)
let $value := $tag/string(@value)
return
attribute { concat('data-', $type) } { $value }
};
Пока все работает нормально, но мне нужно разобраться со случаем, когда у меня есть два или более тега с одинаковым «типом». В этом случае у меня не может быть двух атрибутов с одинаковым именем, поэтому я хочу иметь один атрибут со значениями, разделенными пробелами ...
1012 *, например *
<tag type="concept" value="death"/>
<tag type="concept" value="life"/>
<tag type="concept" value="birth"/>
станет
data-concept="death life birth"
Я застрял на этом некоторое время - поэтому, если у кого-нибудь есть хороший способ изменить мою функцию, я буду очень признателен.
Пожалуйста, обратите внимание, я не хочу использовать XSLT для этого. Я хочу использовать XQuery.
С уважением
1024 * Свами *