2012-12-14 19 views
5

XPath 1.0には、SQLの "in"演算子として機能する演算子がありますか?XPath "in"演算子

select * from tbl_students where id in (1,2,3) 

答えて

13

XPath 1.0の=演算子はそのように動作しますが、XPath 1.0はシーケンスを書き込む構文を提供しません。フォーム

<doc> 
    <value>1</value> 
    <value>2</value> 
    <value>3</value> 
</doc> 

のXML文書を持っているのであれば、その後//doc[value = 2]のような表現は、そのdoc要素を返します。

XPath 2.0では、構文(1, 2, 3)は3つの整数のシーケンスを作成し、$i = (1, 2, 3)のような条件を記述できます。しかし、リテラルシーケンスはXPath 1.0の機能ではありません。XPath式の一方の側で複数の値を取得する唯一の方法は、複数のノードに一致するパス式を使用することです。

+0

1のようなもの。 –

4

私は同じ問題を抱えていましたが、上記の答えは正しいです。あなたが検索「idは」の順序であるかどうかを調べるに

select * from documents where documenttype in ('newsletter','magazine') 
1

//*:document[*:documentType=("magazine","newspaper")] 

ウィッヒのequivalant次のようになります。それはより明確にするために、のXpathでは、これはのような何かを見ていきます(1、2、3、4) index-of()のいずれかを選択できます。 インデックスには注意が必要です。

<student id='1'/> 
<student id='101'/> 
<student id='1001'/> 

のような文書の一部については

を選択します正確な答えを

//*[not(empty(index-of((1, 2, 3, 4), @id)))]