Что такое XPath для выбора диапазона узлов?
У меня есть XML файл, который структурирован так:
<foo>
<bar></bar>
<bar></bar>
...
</foo>
Я не знаю, как получить диапазон узлов. Может ли кто-нибудь дать мне пример выражения XPath, которое захватывает узлы бара 100-200?
Ответы
Ответ 1
Использование
/*/bar[position() >= 100 and not(position() > 200)]
Обратите внимание:
-
Точно выбираются элементы bar
в позиции от 100 до 200 (включительно).
-
Оценка этих выражений XPath может быть во много раз быстрее, чем выражение, использующее аббревиатуру //
, потому что последнее вызывает полное сканирование дерева, корень которого является контекстом node. Всегда старайтесь избегать использования аббревиатуры //
в случаях, когда это возможно.
Ответ 2
//foo/bar[100 <= position() and position() < 200]
Ответ 3
Не лучше fn:subsequence
?
subsequence( /foo/bar, 100, 101 )
возвращает все элементы из позиции от 100 до 200, то есть 101 элемент (или меньше, если исходная последовательность короче).