2016-03-04 166 views
0

我对Xquery非常陌生,正在尝试编写一个函数,它将子节点的名称(一个接一个)与另一个节点的子节点进行比较总是相同的),然后在名称相同的情况下,用来自第一个相关孩子的值更新后者。Xquery返回所有子节点的名称和值

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

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

任何帮助将非常感激。

+0

代码示例应_reproducible_;没有这里的输入例子,这是不可能的。请添加示例输入,您正在获取的输出和预期输出。 [问]提供了一些关于优秀问题的概述。 –

回答

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 
相关问题