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

Что такое XPath, чтобы выбрать элементы с 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, если есть одно совпадение при сравнении элементов из левой последовательности со сравнением элементов из правой последовательность. это может быть очень полезно, если список вещей, с которыми вы хотите сравнить, является динамическим.

licensed under cc by-sa 3.0 with attribution.