Что касается вопроса производительности, боюсь, я не знаю. Это зависит от оптимизатора в конкретном процессоре XPath, который вы используете. Если это важно для вас, измерьте это. Если это не так важно, чтобы измерять, то это не так важно, чтобы беспокоиться.
Как я уже упоминал в моем предыдущем ответе, //table[8]
пахнет неправильно для меня. Я думаю, что гораздо более вероятно, что вы хотите (//table)[8]
. (Оба являются действительными выражениями XPath, но они дают разные ответы).
Вы, вероятно, можете предположить, что процессор является XPath 1.0, если в нем не указано иное - если он поддерживает 2.0, они захотят, чтобы вы знали. Но вы можете легко проверить, например, увидев, что происходит, когда вы делаете //a except //b
.
Нет внутренней причины, по которой процессор XPath 2.0 должен быть быстрее, чем процессор 1.0 по тем же запросам. На самом деле, это может быть немного медленнее, потому что требуется более тщательная проверка типов. С другой стороны, это может быть намного быстрее, потому что многие процессоры 1.0 были сброшены очень быстро и никогда не обновлялись. Но в 2.0 имеются значительные улучшения в функциональности, например, поддержка регулярных выражений.