Two conditions using OR in XPATH
Asked Answered
O

4

45

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.

Osmanli answered 24/9, 2012 at 9:51 Comment(0)
B
62

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]

Borrell answered 24/9, 2012 at 10:8 Comment(1)
for Ms SQL Server using .exist("xpath") - it shows error XQuery [dvEd.EnrichmentData.exist()]: The XQuery syntax 'union' is not supported.Drosophila
K
48

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

King answered 24/9, 2012 at 10:4 Comment(0)
P
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.

Paranoid answered 24/9, 2012 at 11:51 Comment(0)
V
3

As noted by Michael Kay, no or is necessary.

Simply use:

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

+ "')]");
Veiling answered 24/9, 2012 at 13:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.