2013-06-19 3 views
2

Есть ли общие советы или рекомендации по созданию более эффективных селекторов xpath в xslt?Лучшая практика для эффективных селекторов xpath

Например, у вас есть XML-документ DocBook, который содержит только разделы первого уровня, например:

<chapter> 
    <section><info><title>my first section</title></info> ... </section> 
    <section userlevel="expert"><info><title>my second section</title></info> ... </section> 
    <section><info><title>my third section</title></info> ... </section> 
</chapter> 

Я думаю, что в почти всех случаях селектор, как //d:section (1) хуже что один, как /d:chapter/d:section (2). Могу ли я обобщить это и сказать, что чем более избирательный селектор, тем быстрее он будет?

Для другого примера: Если вы хотите использовать второй элемент секции, вы можете вытащить его из поддерева всех разделов или выбрать его непосредственно с помощью //d:section[@userlevel]. Этот селектор использует атрибут, который является более избирательным, но будет ли он быстрее?

Правила большого пальца, что делать (или избегать) при использовании XPath?

ответ

2

Я думаю, вам нужно посмотреть на конкретный процессор XSLT или XPath или XQuery или даже на конкретный процессор и конкретную модель дерева, а затем запустить тесты. Например, //foo настолько распространен, что он может быть оптимизирован в реализации.

Когда я бегу Saxon 9.5 Java HE с XQuery //section десять раз на вашей входной выборки я получаю «Среднее время выполнения: 1.007739ms», а с /chapter/section я получаю «Среднее время выполнения: 1.443799ms».

+0

Интересно. Действительно оптимизация или, возможно, кеш файловой системы? Обычно я переписывал '// section' в'/chapter/section', но в некоторых случаях, вероятно, лучше наоборот. Например, если путь выбирает большинство узлов в документе и узлах, например, база данных группируется в предварительном порядке. В индексе B + -кластеров он просто следует указателям на данные и фильтрует некоторые узлы из результата. – Johannes

+0

Я думаю, все зависит от документа. Я надеялся на простой список вещей, которые нужно искать, но xpath не открыт для такого упрощения. – Tim

+0

Если вам нужен список вещей, которые нужно искать с помощью XSLT 2.0, то проверьте статью «Десять самых распространенных ошибок программирования XSLT» на http://dev.saxonica.com/blog/mike/2010/06/. –

Смежные вопросы