Оператор " или " в предикате XPath?

Что такое XPath-выражения выражение для выбора <link> с элементами type="application/rss+xml" или type="application/atom+xml" (RSS и Atom)

  • link[@rel='alternate'][@type='application/rss+xml'] выбирает RSS-каналы
  • link[@rel='alternate'][@type='application/atom+xml'] выбирает каналы Atom

но каково единственное выражение XPath для выбора их обоих?

спасибо.

2 ответов


использование:

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

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

вы также можете использовать union для этого

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

но or будет делать.


Если вы хотите получить фантазии и использовать XPath 2.0, это более элегантно (но потенциально запутанно, в зависимости от того, кто может читать код), чтобы написать его так:

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

причина этого заключается в том, что XPath 2.0 переопределяет " = " для применения к последовательностям, что означает, что приведенное выше сравнение возвращает true, если есть одно совпадение при сравнении элементов из левой последовательности со сравнением элементов из правой последовательности. это может быть очень полезно, если список вещей, которые вы хотите сравните с динамическим.