Скобки в XPath используются как и в других языках программирования:
- Группировка аргументов функции: например:
//tr/td[contains(.,"e")]
- Индикация приоритета оценки: Например: группировка нормальных арифметических выражений, а также ведущий группировка путей (трасса
LocationPath
до PrimaryExpr
в грамматике XPath), как в (//td)[1]
, чтобы найти первый td
в документе, а не //td[1]
, который находит элементы td
, которые являются первыми дочерними элементами их соответствующих родительских элементов.
Они также используются в
- тестирование узлов : например:
node()
, element()
, ...
- инструкции по обработке: например:
PageBreak()
.
В ваших примерах, которые ничего не находят (например, //tr(/td)/span
, //tr/(td)/span
1 и т. Д.), Заключены в круглые скобки пути, которые не следуют ни в одной из перечисленных выше категорий. Такое использование скобок на самом деле синтаксически неверно и должно было сообщаться как таковое, а не молчаливо проваливаться.
1 Обратите внимание, что это выражение на самом деле было бы синтетически допустимым в XPath 2.0 / 3.0. Спасибо, @Andersson, что заметили.