Ответ 1
вы можете использовать or
/and
внутри [....]
Пример:
//*[contains('abc') or contains('def') or text()='abcdef']
Дополнительная информация об операторах: http://www.w3schools.com/xpath/xpath_operators.asp
У меня есть текстовое поле, txtSearch. Я использую его для поиска людей по имени. это мой код.
var xmlTempResultSearch = xmlResidentListDisplay.selectNodes(
"//PeopleList/Row[contains(translate(@LastName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" +
txtSearch.value + "')]");
Этот код выбирает все имена в XML, такие как текстовый ввод в текстовом поле txtSearch.
Это переводит все заглавные буквы в строчные буквы.
Итак, если я ищу "Dorosan", если я нахожу "doro", он получает правильный человек, потому что он переводит "D" в "d". Но когда я набираю "Доро", он не получает правильного человека.
Мне интересно, могу ли я иметь два условия в XPATH и как? Я хочу, чтобы иметь возможность переводить все в верхнем регистре в нижний регистр, ИЛИ переводить все строчные буквы в верхний регистр.
вы можете использовать or
/and
внутри [....]
Пример:
//*[contains('abc') or contains('def') or text()='abcdef']
Дополнительная информация об операторах: http://www.w3schools.com/xpath/xpath_operators.asp
and
и or
разрешены внутри условия: [here]
. Или вы также можете использовать несколько путей в одном выражении XPath, используя знак трубы.
//PeopleList/Row[c1] | //PeopleList/Row[c2]
Я не думаю, что вам нужно "или" здесь. Вам просто нужно перевести оба операнда в нижний регистр, а не только перевести один из них.
Как отмечено Майклом Кей, нет or
.
Просто используйте:
PeopleList/Row
[contains(translate(@LastName,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'), '"
+
translate(txtSearch.value,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz')'"
+ "')]");