【问题标题】:xquery function to convert tag elements to attributesxquery 函数将标签元素转换为属性
【发布时间】:2010-05-18 12:28:44
【问题描述】:

我需要编写一个函数,该函数采用以下形式的“标记”元素序列:

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

到目前为止,这一切正常,但我需要处理我有两个或多个具有相同“类型”的标签的情况。在这种情况下,我不能有两个同名的属性,所以我想有一个带有空格分隔值的属性...

例如

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

会变成

data-concept="death life birth"

我已经在这个问题上停留了一段时间 - 所以如果有人有一个很好的方法来修改我的函数来做到这一点,我将非常感激。

请注意,我不想为此使用 XSLT。我想使用 XQuery。

亲切的问候

斯瓦米

【问题讨论】:

    标签: attributes xquery elements


    【解决方案1】:

    对于每个不同的类型,通过连接具有该类型的标签的值来获取属性值:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多