1/ j'ai testé ta transformation, elle me prend 1 seconde.
Ma config : win 2k, php 4, apache 2, libxml2 et libxslt, pentium 2.8Ghz.
Le point essentiel est libxml2 et libxslt. Si tu n'utilises pas encore ces librairies tu peux gagner ici un facteur significatif sur ton temps de traitement (par rapport notamment aux moteurs java, ou à sablotron).

2/ Mais tu gagnerais encore bien plus si tu réécrivais ta transformation de 0. Tu n'es pas du tout dans l'esprit XSLT. S'il faut retenir 2 choses à propos de XSLT :
- template
- récursivité

or il n'y a aucun apply-templates dans ton code et tu ne laisses pas le moteur "récurser" tranquillement.
Ecrite, correctement cette transformation ne prend pas plus d'1 milliseconde, je suis prêt à parier, mais tu imbriques des boucles à n'en plus finir avec des tonnes de tests à l'intérieur. Je suis sur que le moteur se tape des millions de boucles pour rien. Exemple :


<xsl:for-each select="//NS2:TBul_Eleve/listePeriode/item">
     ...
     <xsl:for-each select="//NS2:TBul_Periode">
          ...
          <xsl:for-each select="listeModMat/item">
               ...
               <xsl:for-each select="//*">
                   <xsl:if test="@id=$modMat">
                       <xsl:if test="name()='NS2:TBul_Matiere'">

Au 4ème niveau d'imbrication (déjà il faut le faire), tu demandes à revoir l'intégralité du document (select="//*") tout ça pour imbriquer à nouveau 2 tests. Tu ne pourrais pas demander directement l'élément dont tu as besoin ?

Je crois également que ton document XML laisse apparaître que les données qu'il contient sont issues d'une base de données relationnelle. Donc sa structure n'est pas celle d'un document XML natif mais reflète les relations entre tables : c'est très moche. Normalement il faudrait que la couche qui crée ce doc et qui a accès à la souplesse du relationnel en profite pour constituer un doc dont l'esprit est plus XML.
Sinon tu seras obliger pour être propre d'utiliser <xsl:key>, à moins, comme je le crois, que les éléments de description de la structure (du style <listePeriode> <listeModMat> ...) ne soient parfaitement inutiles du fait de la présence des données ensuite.
Pour le xml de départ, je n'est pas le choix. J'ai pas la main dessu, c'est du soap, je lui donne des objet et c'est lui qui me transforme tout cela ainsi... Moi aussi j'ai était déssu qu'il face des décrochage à chaque fois...

Par contre je ne vois pas comment je peux utiliser des template. Car si je resume justement l'exemple que tu prend :

La structure du xml :


<un eleve id="1">
     <la liste des péride>
          <id periode=2>
          <id periode=8>
<une periode id="2">
     <liste des matiere>
          <id matiere=3>
          <id matiere=4>
<une matiere id="3">
     <la note>
          <id note=5>
     <liste des commentaire>
          <id commentaire=6>
          <id commentaire=7>



Je liste tout les periode
     pour la période, je reboucle pour la chercher.
          j'ai la periode donc je liste les matiere
               je reboucle pour chercher la matiere   


Mais là je ne vois pas comme je peux faire pour eviter cela. Etant donner qu'il n'y as pas de vrais lien directe entre la liste des periode d'un eleve et le détaille de la pariode lui même. Je ne vois pas vraiment comment je peux faire sans devoir à chaque fois reboucler entiérement pour faire le lien entre les deux...

Pour ce qui est du moteur de transformation, je ne sais pas trop, car en fait je e vais pas metriser le serveur, donc je ne peux pas être sur que libxslt sois installer dessu, alors que sablotron semble plus facilement présent...
1/ moteur
Si tu utilises php5, libxslt et libxml sont automatiquement installées. Il suffit d'utiliser les bonnes fonctions php.
Si tu utilises php4, leur installation dépend des paramètres --dom-xml et --dom-xslt. Donc c'est facile à vérifier, voir assez facile à recompiler.
Ces librairies sont significativement plus rapide que sablotron, et c'est pour ça que php5 les utilise par défaut.

2/ code
Tu devrais quand même parler de ton problème au gens qui ont pondu le message Soap afin qu'il se rendent compte de l'absurdité de ce qu'il on codé et qu'ils fassent mieux sur un prochain projet.

Ceci étant, pour être dans l'esprit XSLT, dans ton triste contexte, tu dois retirer tous tes <xsl:for-each> et <xsl:if> (la plupart de tes if peuvent se trouver dans une condition xpath de l'attribut select).

Partons du bon pied : au départ tu appliques simplement un template eleve.
Ensuite tu définis un template eleve qui produit l'entête (nom de l'élève, classe) et qui applique un template periode.
Puis tu définis un template periode qui produit l'entête (trimestre X) et applique un template matiere. Etc...

Le "truc" particulier (du fait de la déplorable structure du document source) est de déterminer l'ensemble de noeuds sur lequel s'applique un template grâce au système de clef de XSLT.

Ainsi ton code va être concis et simple. Je donne un exemple :
<xsl:key name="nom_clef" match="noeud_destination" use="jointure_sur_noeud_destination"/>
  ...
  <xsl:template  ....>
     ...
     <xsl:apply-templates select="key('nom_clef',jointure_sur_noeud_courant)"/>
     ...
  </xsl:template>
  ...
1/ Malheureusement, je ne connais pas dutout le serveur, il y auras surment une bonne centaine de serveur différent utiliser, avec pour beaucoup d'entre eux des incompetant qui les gére (certain par exemple refuse le SSL car il y as des faille, donc il préfére publier des info importante en http simple...)


pour ce qui est de php 5, je ne suis pas sur car j'avais lut ceci :

http://www.nexen.net/docs/php/annotee/xslt.intro.php

En tout cas pour l'instant je resterais sous php4 sablotron, et je verais si par la suite je ne peux pas proposer en plusieur version, et comme il n'est pas à esclure que nous proposion notre propre serveur on utiliseras le plus performant là...

2/ C'est moi qui est pondut, le message soap. Ou presque. Car j'ai crée une structure objet, avec un eleve qui contien des periode qui contien des module qui contient des matiere qui contient des sous matiére qui contien une note... Au niveaux de la structure objet cela me semble bon. Mais quand delphi/indy récupére l'objet c'est lui qui le transforme ainsi. Et bien sur je n'est plus la main.

Et je ne connais pas d'autre moyen pour améliorer cela si ce n'est changer de structure de donner en entré, mais dans ce cas je ne sais pas comment il vas interpreter cette donner, donc ce serais totalement au hazard. Ou alors tout gérer moi même, mais trop long dans ce cas là...


Pour ce qui est de l'explication sur les template, je te remercie, je comprend un peux mieux maintenant. Je ne vais pas avoir le temps de tout refaire maintenant, mais je vais y retravailler. En plus je vais surment limiter à une période à la fois ce qui vas diviser également par 4 le temps d'execution (en tout cas je l'espére). Mais aussi le temps de téléchargement ce qui seras important, car même compresser, on arrive à 6ko...