web-dev-qa-db-ja.com

XPATHでORを使用する2つの条件

「txtSearch」というテキストボックスがあります。姓で人を検索するために使用しています。これは私のコードです。

var xmlTempResultSearch = xmlResidentListDisplay.selectNodes(
    "//PeopleList/Row[contains(translate(@LastName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" +
    txtSearch.value + "')]");

このコードは、txtSearchテキストボックスへのテキスト入力のように、XML内のすべての姓を選択します。

これにより、すべての大文字が小文字に変換されます。

したがって、「Dorosan」を検索している場合、「doro」と入力すると、「D」を「d」に変換したため、正しい人が取得されます。しかし、「Doro」と入力すると、正しい人が取得されません。

XPATHに2つの条件を設定できるかどうか、またその方法は?すべての大文字を小文字に変換できるようにしたい、ORすべての小文字を大文字に変換します。

26
edsamiracle

or/and[....]内で使用できます

例:

//*[contains('abc') or contains('def') or text()='abcdef']

オペレーターに関する詳細情報: http://www.w3schools.com/xpath/xpath_operators.asp

32
CosminO

andおよびorは条件内で許可されます:[here]。または、パイプ記号を使用して1つのXPath式で複数のパスを使用することもできます。

//PeopleList/Row[c1] | //PeopleList/Row[c2]

32
Jiri Kremser

ここで「または」が必要だとは思わない。どちらか一方のみを翻訳するのではなく、両方のオペランドを小文字に翻訳する必要があります。

1
Michael Kay

Michael Kayが述べたように、orは必要ありません。

単に使用

PeopleList/Row
  [contains(translate(@LastName, 
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
                     'abcdefghijklmnopqrstuvwxyz'), '" 
+
           translate(txtSearch.value,
                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
                     'abcdefghijklmnopqrstuvwxyz')'" 

+ "')]");
1