'OR' operator in XPath predicate?

Viewed 32136

What is the XPath expression to select <link> elements with type="application/rss+xml" OR type="application/atom+xml" (RSS and Atom feeds)

  • link[@rel='alternate'][@type='application/rss+xml'] selects RSS feeds
  • link[@rel='alternate'][@type='application/atom+xml'] selects Atom feeds

But what is the single XPath expression for selecting them both?

Thank you.

2 Answers

use:

link[@rel='alternate'][@type='application/rss+xml' or @type='application/atom+xml'] 

see http://www.w3.org/TR/xpath/#NT-OrExpr

You could also use union to accomplish this

link[@rel='alternate'][@type='application/rss+xml']|link[@rel='alternate'][@type='application/atom+xml']

but or will do.

if you want to get fancy and use XPath 2.0, it is more elegant (but potentially confusing, depending who might be reading the code) to write it like this:

link[@rel='alternate'][@type = ('application/rss+xml', 'application/atom+xml')] 

the reason for this is that XPath 2.0 redefines '=' to apply to sequences, which means that the above comparison returns true if there is one match when comparing items from the left-hand sequence with comparing items from the right-hand sequence. this can be very useful if the list of things you want to compare with is dynamic.

Related