8

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.

vhs
  • 9,316
  • 3
  • 66
  • 70

1 Answers1

20

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()]
kjhughes
  • 106,133
  • 27
  • 181
  • 240