0

次の形式の「タグ」要素のシーケンスを受け取る関数を作成する必要があります。

<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 }
};

これは今のところうまく機能していますが、同じ「タイプ」のタグが2つ以上ある場合に対処する必要があります。この場合、同じ名前の2つの属性を持つことはできないので、スペースで区切られた値を持つ1つの属性が必要です...

例えば

<tag type="concept" value="death"/>
<tag type="concept" value="life"/>
<tag type="concept" value="birth"/>

になります

data-concept="death life birth"

私はしばらくの間これに固執しています-ですから、誰かがこれを行うために私の関数を変更する良い方法を持っているなら、私は大いに義務付けられるでしょう。

plsは私がこれにXSLTを使いたくないことに注意してください。XQueryを使用したい。

敬具

スワミ

4

1 に答える 1

0

個別のタイプごとに、そのタイプのタグの値を結合して属性値を取得します。

declare function local:tagsToAttrs($tags as element()*) as attribute()*
{
    for $type in distinct-values($tags/@type)
    let $value := string-join($tags[@type=$type]/@value," ")
    return
        attribute { concat('data-', $type) } { $value }
};
于 2010-05-19T07:14:07.123 に答える