tags:

views:

144

answers:

3
/html/body/form/select/option[@val = '1' and @val = '3']

so that means select the first and third option in a select-multiple form ?

A: 

Almost. A predicate (everything inside the square brackets) specifies the condition for including a specific node in the result set, and it's impossible for any one element to have a val value of 1 and 3 at the same time. If you replace the and with or, however, the expression will match any node that meets either criteria:

/html/body/form/select/option[@val = '1' or @val = '3']

A side note: If you want to select nodes based on their position and not their attribute values, you can use the position() function inside the predicate.

Jakob
+2  A: 

Did you mean or?

/html/body/form/select/option[@val = '1' or @val = '3']

That should select both elements. By using and you're trying to select an element whose val is both 1 and 3, which isn't going to work. :-)

RichieHindle
A: 

To be clear, by select you mean it returns those nodes in the results, right? Not actually selects it in the DOM?

Either way, what you want is the following:

 /html/body/form/select/option[1|3]

or

 /html/body/form/select/option[position()=1|postion()=3]

Notice the use of the | meaning "or", you don't want to use "and" because that means you want all results that are both in position 1 and 3, which is impossible. You want all results that are in either position 1 or 3.

Anthony