XPath est le travail avec le SAX, et la plupart des processeurs XSLT (surtout Saxon et Apache Xalan) prennent en charge l'exécution des expressions XPath à l'intérieur de Xslt sur un SAX flux sans la construction de l'ensemble des dom.
Ils parviennent à le faire, en très gros, comme suit :
- En examinant les expressions XPath dont ils ont besoin pour correspondre à
- La réception d'événements SAX et de tester si ce nœud est nécessaire ou seront nécessaires par l'une des expressions XPath.
- Ignorant le SAX cas si il n'est d'aucune utilité pour les expressions XPath.
- Mise en mémoire tampon si c'est nécessaire
Comment ils tampon, il est aussi très intéressant, la cause de certains de créer simplement DOM fragments ici et là, d'autres utilisent très optimisé tables pour la recherche rapide et la consommation de mémoire réduite.
Combien ils parviennent à optimiser dépend en grande partie du type de requêtes XPath qu'ils trouvent. Comme l'a déjà posté Saxon documentation expliquer clairement, les requêtes de ce mouvement "vers le haut" et puis traverse "à l'horizontale" (de frère en frère, sœur) le document nécessite évidemment l'ensemble du document pour y être, mais la plupart d'entre eux nécessitent seulement quelques nœuds pour être gardé en mémoire vive à tout moment.
Je suis assez sûr de cela parce que, quand j'étais encore à faire de chaque jour une webapp à l'aide de Cocon, nous avons eu le XSLT de mémoire, problème chaque fois, nous avons utilisé un "//" expression à l'intérieur d'une transformation XSLT, et, assez souvent, nous avons dû retravailler des expressions XPath pour permettre une meilleure SAX optimisation.