Оператор «ИЛИ» в предикате XPath? - PullRequest
23 голосов
/ 06 февраля 2010

Что такое выражение 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 ]

48 голосов
/ 06 февраля 2010

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

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

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

Вы также можете использовать союз, чтобы выполнить это

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

но or подойдет.

12 голосов
/ 04 марта 2010

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

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

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

...