2011-03-12 50 views
5
子節點選擇不同的值

比方說,我有以下XML:根據XQuery的

<info> 
    <channel> 
     <A> 
      <X> 
      <title>title1</title> 
      </X> 
      <Y value="20"/> 
     </A> 
    </channel> 
    <channel> 
     <A> 
      <X> 
      <title>title1</title> 
      </X> 
      <Y value="20"/> 
     </A> 
     <A> 
      <X> 
      <title>title2</title> 
      </X> 
      <Y value="20"/> 
     </A> 
    </channel> 
</info> 

和下面的XQuery

{ 
for $A in doc('test.xml')//A 
let $TITLE := $A/X/title 
where string($A/Y/value) > 20 
return 
    string($TITLE) 
} 

這一點,當然,輸出:

title1 
title1 
title2 

我如何使用distinct-values來刪除重複項?我想知道,因爲for基本上只給我一個項目每次迭代,我不能在$A上撥打distinct-values。或者有沒有其他方法可以刪除重複的輸出?

問題是我需要引用另一個節點,所以基本上調用distinct-values(doc...)不起作用,因爲它不返回節點。

回答

5

UPDATE

過濾重複節點,使用XPath的變化從this answer

//A[index-of(//A/X/title, X/title)[1]] 

這給你所有的A s的不同title秒。

您可以將此xpath表達式擴展爲也對Y進行篩選 - 無需XQuery FLWOR

更新的最終

應用distinct-values到XPath表達式在要遍歷:

for $title in distinct-values(doc('test.xml')//A/X/@title) 
return string($title) 

或只是

distinct-values(doc('test.xml')//A/X/@title) 
+0

+1對於最後一個正確的XQuery/XPath表達式。 – 2011-03-12 16:46:44

+0

感謝您的更新!我稍後會看看它! – slhck 2011-03-12 17:57:11

+0

@slhck所以它是如何去的? – 2011-03-14 06:35:49