Оператор '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 для выбора их обоих?

Спасибо.

24
задан Dan Lowe 6 May 2017 в 16:09
поделиться

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']

, но или подойдут.

50
ответ дан 28 November 2019 в 22:43
поделиться

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

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

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

12
ответ дан 28 November 2019 в 22:43
поделиться