Каков наиболее эффективный способ адресации элемента в XPath?

У меня есть Java-программа, которая заботится об эффективности. Там я использую XPath.

В XPath я могу выбрать элементы, начиная с корня

/root/a/b/c/d/e

или используйте descendent-or-self ось:

//e

Какой метод будет наиболее эффективным среди этих двух?

3 ответа

Прямой путь будет иметь тенденцию работать лучше, чем при использовании более общего потомка или себя (//) ось, однако:

  • Реализации могут отличаться (но, как правило, прямые пути работают лучше).
  • Разница может быть достаточно незначительной, чтобы не иметь значения, особенно для небольших документов.
  • Как и в случае всех проблем с производительностью, проведите измерения перед оптимизацией, чтобы избежать чрезмерных усилий в областях, отличных от узких мест.

Я полагаю, что / root / a / b / c / d / e будет более эффективным, потому что в первом случае процессор XPath может устранить множество ветвей, тогда как во втором случае (//e) процессор XPath должен искать по всему дереву документа.

Вы должны написать небольшую Java-программу, которая анализирует два разных способа, а затем посмотреть, сколько времени потребуется для запуска 1000 циклов.

Понимание ведущих / а также // конструкции очень важны.

Ведущий / запускает путь, который всегда имеет отношение к корневому узлу. Поэтому, хотя мы ищем подузел, XPath:

root/a/b/c

... все равно вернется каждый c узел в вашем документе XML, даже если они не являются потомками первого c узел. Аналогично, XPath:

//e/

... все равно вернется каждый e узел в вашем XML-документе, а не только потомки вашего первого c узел.

Другие вопросы по тегам