'OR' operator in XPath predicate?
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.
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, 2020Comments
-
abernier about 4 years
What is the XPath expression to select
<link>
elements withtype="application/rss+xml"
ORtype="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.
-