我对Xquery很新,我正在尝试编写一个带有子节点名称的函数(逐个),并将它们与另一个节点的子节点(总是相同)进行比较,然后如果名称相同,则使用第一个相关子项的值更新后者。
首先,我只想返回rootnode子节点的所有名称和值。我已经尝试了各种各样的东西,但下面只返回节点的第一个元素的名称和值。
for $x in $Stored/Rootnode/*
let $childnodename:= name($x)
let $childnodevalue:= data($x)
return distinct-values(concat($childnodename," = ",$childnodevalue ))
非常感谢任何帮助。
答案 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