43

I have a textbox, 'txtSearch'. I am using it to search people by Last Name. this is my code.

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

This code selects all last names in the XML like the text input in the txtSearch textbox.

This translates all uppercase letters to lowercase letters.

So if I am searching for 'Dorosan', if I type 'doro', it retrieves the correct person because it translated the 'D' to 'd'. But when I type 'Doro', it doesn't retrieve the correct person.

I'm wondering if I can have two conditions in an XPATH, and how? I want to be able to translate all uppercase to lowercase, OR translate all lowercase to uppercase.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
edsamiracle
  • 753
  • 3
  • 12
  • 27

4 Answers4

59

and and or are allowed inside the condition: [here]. Or you may also use multiple paths in one XPath expression using the pipe sign.

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

Jiri Kremser
  • 12,471
  • 7
  • 45
  • 72
  • 1
    for Ms SQL Server using .exist("xpath") - it shows error XQuery [dvEd.EnrichmentData.exist()]: The XQuery syntax 'union' is not supported. – Philipp Munin Jul 13 '16 at 20:02
47

you can use or / and inside [....]

Example:

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

More info about operators: http://www.w3schools.com/xml/xpath_operators.asp

rafailka
  • 73
  • 1
  • 8
CosminO
  • 5,018
  • 6
  • 28
  • 50
4

I don't think you need an "or" here. You just need to translate both operands to lower-case, rather than only translating one of them.

Michael Kay
  • 156,231
  • 11
  • 92
  • 164
3

As noted by Michael Kay, no or is necessary.

Simply use:

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

+ "')]");
Dimitre Novatchev
  • 240,661
  • 26
  • 293
  • 431