2017-02-14 85 views
1

我必須獲取某個節點的所有當前值。 我找到this回答了提問。 我的XML文件看起來不一樣。所以,我有具有相同名稱的多個元素..XQuery:如何選擇唯一節點

<instance> 
    <value>0</value> 
    <value>0.72</value> 
    <value>0</value> 
    <value>0.72</value> 
    <value>2</value> 
    <value>22</value> 
    </instance> 
    <instance> 
    <value>10000000</value> 
    <value>0.72</value> 
    <value>0</value> 
    <value>0.72</value> 
    <value>1</value> 
    <value>22</value> 
    </instance> 
    <instance> 
    <value>20000000</value> 
    <value>0.64</value> 
    <value>-0.04</value> 
    <value>0.68</value> 
    <value>1</value> 
    <value>22</value> 
    </instance> 

下面的查詢是選擇每個5th值:

new XQuery("doc('database/dataset.xml')/dataset/body/instances/instance/value[5]") 

有了結果:

<value>2</value> 

<value>1</value> 

<value>1</value> 

我怎樣才能納入接受鏈接問題的答案以獲得所需的輸出:

<value>2</value> 

<value>1</value> 

回答

0

我也建議備選答案,因爲這是XQuery的,它允許元素構造。但是這隻適用於以下情況:節點的身份無關:

for $value in distinct-values(
    doc('database/dataset.xml')/dataset/body/instances/instance/value[5] 
) 
return <value>{$value}</value> 
+0

哇,這是一個非常快的方法!我傾向於接受這一點(即使第一個答案回答了確切的問題..)第一個答案似乎產生更多的開銷(它運行在一個異常(從XML數據庫中拋出..我還沒有弄清楚爲什麼))。謝謝 – Jan

0

我認爲它看起來像

doc('database/dataset.xml') 
/dataset 
/body 
/instances 
/instance[ not(value[5] = preceding-sibling::instance/value[5]) ] 
/value[5] 

(使用編輯接受的答案招)