[英]Is there a SELECT WHERE… IN equivalent in Xquery?
我是Xquery的新手,很難解決這個問題。 基本上,我當前的XML文件的結構是這樣的:
<root>
<a>
<aid>XX</aid>
...
</a>
<a>
<aid>xx</aid>
...
</a>
<b>
<bid>xx</bid>
...
</b>
<b>
<bid>xx</bid>
...
</b>
...
</root>
我想要得到的是b元素的信息,這些元素的“出價” 不等於 a元素中的任何 “援助”。 我試圖這樣做。 首先,我讓一個變量來保存幫助:
let $aid := (xpath to the aid elements)
然后我嘗試從傳統sql進行類似“ SELECT WHERE IN”的操作。 即:
for $b in (xpath to b elements)
where $b/bid != $aid
(我試圖達到NOT IN效果)
return $b/(infomation)
但是問題是我找不到正確的方法來執行此操作。 我也試過
where $e/bid != $aid[*]
,它也不起作用。 那我走錯了軌道嗎? 無論如何在Xquery(1.0)中實現了這一點? 還是有其他方法來獲取所需的信息?
b個元素的“出價”不等於a元素中的任何“援助”。
最直接的方法是
for $b in //b
where not(exists(//a[aid = $b/bid]))
return $b
我不確定在您的設置中是否可以使用以下XPath方法。 跟隨XPath
//b/bid[not(./text() = //a/aid/text())]/text()
當應用於示例XML時
<root>
<a>
<aid>XX</aid>
</a>
<a>
<aid>YY</aid>
</a>
<b>
<bid>XX</bid>
</b>
<b>
<bid>YY</bid>
</b>
<b>
<bid>ZZ</bid>
</b>
</root>
返回ZZ
。
正如您提到的那樣,您想從b
節點獲取所有bid
信息不等於任何aid
值的信息,我假設您有更多的a
和b
節點子節點。 要獲得匹配的b節點以及XPath之后的所有子節點
//b[bid[not(./text() = //a/aid/text())]]
當應用於擴展示例XML時
<root>
<a>
<aid>XX</aid>
<more>more a XX</more>
</a>
<a>
<aid>YY</aid>
<more>more a YY</more>
</a>
<b>
<bid>XX</bid>
<more>more b XX</more>
</b>
<b>
<bid>YY</bid>
<more>more b YY</more>
</b>
<b>
<bid>ZZ</bid>
<more>more b ZZ</more>
</b>
</root>
退貨
<b>
<bid>ZZ</bid>
<more>more b ZZ</more>
</b>
=
運算符實際上在XQuery中進行成員資格測試。
從而,
a = ('foo', 'bar', 'baz', 'qux')
實際上測試a
是foo
, bar
, baz
還是qux
任何 a
。
因此,它只是與WHERE IN
等效的標准相等運算符,在一側提供了序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.