2016-03-04 167 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 
相關問題