2016-04-29 66 views
2

我想從我們的XML本機數據庫中提取一些數據,如果一個元素的值在包含的值序列中。不要以爲我說得對。例如,Where子句,以確定元素值是否在序列中(XQ)

鑑於以下XML:

<root> 
    <a>1</a> 
<root> 

似乎應該有辦法做到像(藉口語法,當作僞)

where root/a in (1,2,3,4) 

從我所有的搜尋,這似乎不可能。充其量,我得到了:

where root/a = 1 or root/1 = 2 or root/a = 3 etc 

有沒有更好的方法來做到這一點?

回答

5

您可以簡單地使用=操作:

where root/a = (1,2,3,4) 

=作品的設定值類似於包含,這是你需要的究竟是什麼。對比=eq需要原子值進行比較。


下面是一個完整的例子。

XML:

<root> 
    <parent> 
     <a>1</a> 
    </parent> 
    <parent> 
     <a>4</a> 
    </parent> 
    <parent> 
     <a>10</a> 
    </parent> 
</root> 

的XQuery:

for $p in /root/parent 
where $p/a = (1,2,3,4) 
return $p 

輸出:

<parent> 
    <a>1</a> 
</parent> 
<parent> 
    <a>4</a> 
</parent> 

演示:xpathtester

+2

哦,我的天啊真的?! 讓我試試... – tenwest

+0

哇,作品像一個魅力哈哈。謝謝 – tenwest

+1

+1 FYI - @tenwest你也可以從FLWOR中的where表達式中移動過濾到謂詞中,並用這個(等價和更短的)XPath表達式來選擇父元素:'/ root/parent [a = (1,2,3,4)]' –

相關問題