Xquery返回所有子节点的名称和值

时间:2016-03-04 12:38:12

标签: nodes children xquery-3.0

我对Xquery很新,我正在尝试编写一个带有子节点名称的函数(逐个),并将它们与另一个节点的子节点(总是相同)进行比较,然后如果名称相同,则使用第一个相关子项的值更新后者。

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您所拥有的应该是返回所有名称/值项目。您正在为Rootnode的每个子元素调用distinct-values(),而不是在生成的字符串序列上。将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