Два условия с использованием ИЛИ в XPATH

У меня есть текстовое поле «txtSearch». Я использую его для поиска людей по фамилии. это мой код.

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

Этот код выбирает все фамилии в XML, как ввод текста в текстовое поле txtSearch.

Это переводит все буквы верхнего регистра в буквы нижнего регистра.

Поэтому, если я ищу «Доросан», если я набираю «доро», он находит нужного человека, потому что он перевел «Д» на «д». Но когда я набираю «Доро», он не находит нужного человека.

Мне интересно, могу ли я иметь два условия в XPATH и как? Я хочу иметь возможность переводить все прописные буквы в строчные или переводить все строчные буквы в прописные.


person edsamiracle    schedule 24.09.2012    source источник


Ответы (4)


and и or разрешены внутри условия: [here]. Или вы также можете использовать несколько путей в одном выражении XPath, используя знак вертикальной черты.

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

person Jiri Kremser    schedule 24.09.2012
comment
для Ms SQL Server с использованием .exist(xpath) — отображается ошибка XQuery [dvEd.EnrichmentData.exist()]: синтаксис XQuery «объединение» не поддерживается. - person Philipp Munin; 13.07.2016

вы можете использовать or / and внутри [....]

Пример:

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

Дополнительные сведения об операторах: http://www.w3schools.com/xpath/xpath_operators.asp.

person CosminO    schedule 24.09.2012

Как заметил Майкл Кей, or не требуется.

Просто используйте:

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

+ "')]");
person Dimitre Novatchev    schedule 24.09.2012

Я не думаю, что вам нужно "или" здесь. Вам просто нужно перевести оба операнда в нижний регистр, а не только один из них.

person Michael Kay    schedule 24.09.2012