Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1566 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Quitter prématurément une boucle for-each ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Quitter prématurément une boucle for-each ?

n°2032660
lalalallal
Posté le 27-10-2010 à 19:23:08  profilanswer
 

Bonsoir,
 
dans un script XSL j'utilise un <xsl:for-each></xsl:for-each> pour parcourir un fichier XML et à chaque fois un test <xsl:if test="..."></xsl:if> est effectué.
Si une certaine valeur est détectée alors elle est affichée <xsl:value-of select="..." /> sinon rien ne se passe.
 
Ce test est répété plusieurs fois (environ 957921 fois ^^) avec à chaque fois une valeur différente.
 
Je voudrais savoir s'il existe une instruction pour quitter le xsl:for-each une fois que la valeur a été trouvée. Un peu comme un "Exit For" en VBA que l'on mettrai dans le if après le xsl:value-of.
En effet, ça ne sert à rien de tester les 957921 valeurs si elle a été trouvée dès le premier test. (je recherche cela pour accélérer mon programme qui met 6 minutes pour s'exécuter :s )
 
J'espère ne pas être trop brouillon dans mes explications.
 
Merci d'avance,
 
Lalalallal

mood
Publicité
Posté le 27-10-2010 à 19:23:08  profilanswer
 

n°2032670
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2010 à 19:59:27  profilanswer
 

Non, XSL est un langage fonctionnel (mauvais, mais quand même), c'est pas du visual basic.
 
Si tu ne veux pas itérer sur toutes tes nodes, sélectionnes celles qui t'intéressent au lieu de faire des tests dégueulasses.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032677
lalalallal
Posté le 27-10-2010 à 20:15:46  profilanswer
 

Bonsoir,
 
comment je fais pour les sélectionner ?... j'ai un XML de la forme
<bord>
<1>
    <a></a>
    <b></b>
    <c></c>
    <d>aaa</d>
</1>
...
<1>
    <a></a>
    <b></b>
    <c></c>
    <d>affr</d>
</1>
</bord>
 
Et je veux par ex dans un premier temps tester si on a 'affr' puis 'aaa' puis...

n°2032683
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2010 à 20:48:50  profilanswer
 

lalalallal a écrit :

Bonsoir,
 
comment je fais pour les sélectionner ?... j'ai un XML de la forme
<bord>
<1>
    <a></a>
    <b></b>
    <c></c>
    <d>aaa</d>
</1>
...
<1>
    <a></a>
    <b></b>
    <c></c>
    <d>affr</d>
</1>
</bord>
 
Et je veux par ex dans un premier temps tester si on a 'affr' puis 'aaa' puis...


Va falloir clarifier que ce que tu veux dire par "tester si ona affr puis aaa puis..." parce que là ça veut pas dire grand chose [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032686
lalalallal
Posté le 27-10-2010 à 21:02:18  profilanswer
 

Oui désolé
 
je regroupe deux XML : voiture.xml et garage.xml
 
<Voitures>
<Voiture>
     <Id></Id>
     <Modele></Modele>
     <GarageId>123</GarageId>
</voiture>
...
<Voiture>
     <Id></Id>
     <Modele></Modele>
     <GarageId>897</GarageId>
</voiture>
</voitures>
 
et  
 
<garages>
<garage>
   <Id>123</Id>
   <adresse><adresse>
<garage>
...
<garage>
   <Id>897</Id>
   <adresse><adresse>
<garage>
</garages>
 
Donc pour ça j'ai créé un XSL qui parcourt le premier fichier (voiture)
recopie toutes les données sauf garageId.
Je veux remplacer <GarageId>897</GarageId> par  
<garage>
   <Id>897</Id>
   <adresse><adresse>
<garage>
 
donc pour ça je stocke garageId (897 ici) dans une variable
puis je parcourt le fichier (garage.xml) avec une boucle for-each
et si document('garage.xml')/garages/garage/Id est égal à cette valeur j'affiche tout le noeud garage sinon je ne fait rien
 
au final j'obtient un fichier de la forme  
 
<Voitures>
<Voiture>
     <Id></Id>
     <Modele></Modele>
     <garage>
          <Id>123</Id>
          <adresse><adresse>
     <garage>
</voiture>
...
<Voiture>
     <Id></Id>
     <Modele></Modele>
     <garage>
          <Id>897</Id>
          <adresse><adresse>
     <garage>
</voiture>
</voitures>

n°2032702
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2010 à 21:51:21  profilanswer
 

lalalallal a écrit :

donc pour ça je stocke garageId (897 ici) dans une variable
puis je parcourt le fichier (garage.xml) avec une boucle for-each
et si document('garage.xml')/garages/garage/Id est égal à cette valeur


Alors que tu pourrais simplement sélectionner //garage[Id/text()=897] [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032705
lalalallal
Posté le 27-10-2010 à 22:05:10  profilanswer
 

^^ je me suis compliqué la vie pour rien...
 
Merci beaucoup !
 
je modifierai mon programme demain...
 
Bonne soirée !
 
Lalalallal

n°2032711
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2010 à 22:21:58  profilanswer
 

lalalallal a écrit :

^^ je me suis compliqué la vie pour rien...


xsl n'est pas un langage impératif à la vb, souviens-t-en bien, c'est déjà peu lisible et peu maintenable quand c'est bien codé, mais si tu fais du vb en XSL tu vas vite te tirer une balle.

 

Et XPath est probablement la partie la plus agréable de faire des xsl (même si tu peux vite arriver à des trucs imbitables si tu fais pas attention), si tu comptes faire plus d'une ou 2 stylesheets par an je te conseille très fortement d'apprendre xpath en entier (spec w3c + zvon) ça te sera essentiel.


Message édité par masklinn le 27-10-2010 à 22:24:08

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Quitter prématurément une boucle for-each ?

 

Sujets relatifs
Boucle forjQuery : problème .append() et $.each()
un objet de formulaire en boucle [résolu]Lenteur d'exécution (grande boucle accédant à une dll)
exit dans une boucle if ?boucle pour ouvrir plusieurs fichiers en C
Aide pour boucle for shell DOSPHP Pb de sortie de boucle
[Résolu] Petit problème "for" déjà dans une boucle ...[c] 1er joueur Niquel 2nd ... en boucle :/
Plus de sujets relatifs à : Quitter prématurément une boucle for-each ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR