'OR' operator in XPath predicate?

31,698

Solution 1

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.

Solution 2

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.

Share:
31,698
abernier
Author by

abernier

Hi, I'm Antoine Bernier — JS fullstack webdev with 15y of experience. I love animation, unix, design and opensource. Feel free to contact me 👋 http://be.net/abernier

Updated on May 07, 2020

Comments

  • abernier
    abernier about 4 years

    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.