vhs
vhs

Reputation: 10051

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.

Upvotes: 8

Views: 8204

Answers (1)

kjhughes
kjhughes

Reputation: 111491

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()]

Upvotes: 21

Related Questions