2

我对 Xquery 很陌生,正在尝试编写一个函数,该函数获取子节点的名称(一个接一个)并将它们与另一个节点的子节点(始终相同)进行比较,然后将名称放在哪里同样,用第一个的相关子项的值更新后者。

首先,我只想返回根节点子节点的所有名称和值。我已经尝试了各种方法,但下面只返回节点第一个元素的名称和值。

for $x in $Stored/Rootnode/* let $childnodename:= name($x) let $childnodevalue:= data($x) return distinct-values(concat($childnodename," = ",$childnodevalue ))

任何帮助将非常感激。

4

1 回答 1

2

您所拥有的应该是返回所有名称/值项。您正在distinct-values()为 Rootnode 的每个子元素调用,而不是在生成的字符串序列上调用。移出distinct-values()FLWOR 将对整个集合进行重复数据删除:

let $Stored := 
    <stored>
        <Rootnode>
            <foo>a</foo>
            <bar>b</bar>
            <baz>c</baz>
            <foo>a</foo>
            <bar>b</bar>
            <baz>a</baz>
        </Rootnode>
    </stored>

let $vals :=
    for $x in $Stored/Rootnode/*
    let $childnodename:= name($x)
    let $childnodevalue:= data($x)
    return concat($childnodename," = ",$childnodevalue )

(: dedup name/value strings :)
return distinct-values($vals)

产生:

foo = a 
bar = b 
baz = c 
baz = a
于 2016-03-04T23:10:24.883 回答