Обычно A | B
- правильный способ сделать это. Но символ канала - это, по сути, объединение двух полных выражений XPath. Использовать его в таком случае может быть раздражающим:
/red/yellow/blue/green/gold | red/orange/blue/green/gold
, так как вы повторяете все выражение, за исключением одного маленького фрагмента, который меняется.
В подобных случаях часто имеет смысл использовать предикат и вместо него функцию name()
:
/red/*[name() = 'yellow' or name()='orange']/blue/green/gold
Этот метод дает вам доступ к гораздо более широкому кругу логических операций. Это также (возможно) быстрее, поскольку навигатору XPath нужно только пройти узлы, которые он тестирует, один раз.