Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XPath one of multiple attribute values with condition

Given the following expression, how can I use = to be more concise and explicit?

(//h2/@id[contains(.,"foo") or contains(.,"bar") or contains(.,"baz"))[last()]

Here's what I tried, but my interpreter says it's not valid:

(//h2/@id[text() = ("foo", "bar", "baz")])[last()]

I cannot use contains() because I need to guard against substring matches. I'm using XPath 1.0 and an answer to a related question is the impetus for this question.

like image 860
vhs Avatar asked Sep 30 '17 13:09

vhs


1 Answers

In XPath 2.0,

(//h2[@id = ("foo", "bar", "baz")])[last()]

would select the last h2 element in the document with an id attribute value of foo, bar, or baz.

In XPath 1.0, you'd use explicit boolean or operators:

(//h2[@id="foo" or @id="bar" or @id="baz"])[last()]
like image 91
kjhughes Avatar answered Oct 13 '22 19:10

kjhughes