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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XML/XSL] Mise en forme de 2 requetes en meme tps

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML/XSL] Mise en forme de 2 requetes en meme tps

n°450960
hop le fou
Tu m'en diras tant
Posté le 08-07-2003 à 12:22:11  profilanswer
 

Edit:Nouveau problème plus loin...
     Premier problème résolu
 
Je recupere les données de 2 requetes dans une feuille XML
structure du fichier xml correspondant
<DOCUMENT>
<REQUETE1>
 <ROWSET>
  <ROWR1>
  </ROWR1>
 </ROWSET>
</REQUETE1>
<REQUETE2>
 <ROWSET>
  <ROWR2>
  </ROWR2>
 </ROWSET>
</REQUETE2>
en mettant plusieurs enregistrement au milieu
je dois afficher dans mon tablo des lignes sous la forme suivante:
Info ROWR1 Info ROWR2
Info ROWR1 Info ROWR2
 
donc g qqchose qui ressemble a ca:
 
<xsl:for-each select="DOCUMENT/REQUETE/ROWSET/ROW">
 <tr>
  <td align="CENTER"><xsl:value-of select="NUMCONT"/></td>
  <ici je voudrais afficher les resultats de requete2 sachant qu il peut y en avoir plusieur pour 1 resultat de requete1>  
 </tr>
 
 
==> et la probleme : je ne pe pas acceder a la partie Requete2 de mon fichier xml
si je fais la boucle plus haut (Document) je ne fais qu un tour de boucle et donc ce n'est pas bon
 
comment faire?


Message édité par hop le fou le 09-07-2003 à 10:44:17
mood
Publicité
Posté le 08-07-2003 à 12:22:11  profilanswer
 

n°451106
avander
Posté le 08-07-2003 à 14:16:40  profilanswer
 

Comment détermines tu qu'il y a plusieurs ROW2 pour une ROW1 ( et l'inverse éventuellement)? Sans ça je ne vois point de solution...
 
A+


---------------
A thing of beauty is a joy forever (John Keats)
n°451114
hop le fou
Tu m'en diras tant
Posté le 08-07-2003 à 14:23:49  profilanswer
 

Avander a écrit :

Comment détermines tu qu'il y a plusieurs ROW2 pour une ROW1 ( et l'inverse éventuellement)? Sans ça je ne vois point de solution...
 
A+


 
g pas bien compris la question...
mais ce n'est pas ca le pb...
 
voici le code

Code :
  1. <xsl:for-each select="DOCUMENT/REQUETE/ROWSET/ROW">
  2.  <tr>
  3.   <td align="CENTER"><xsl:value-of select="NUMCONT"/></td>
  4.   <td align="CENTER" class="LL"><xsl:value-of select="REFPROD"/></td>
  5.   <td align="RIGHT" class="LL"><xsl:value-of select="PRANN"/></td>
  6.   <td align="CENTER" class="LL"><xsl:value-of select="POSITION"/></td>
  7.   <xsl:if test="not(REQUETE2/ROWSET/ROW)"><td align="CENTER" class="LL">-</td><td align="CENTER" class="LL">-</td><td align="CENTER" class="LL">-</td><td align="RIGHT" class="LL">-</td><td align="RIGHT" class="LL">-</td><td align="RIGHT" class="LL">-</td><td align="RIGHT" class="LL">-</td></xsl:if>
  8.   <xsl:if test="REQUETE2/ROWSET/ROW">
  9.    <td align="CENTER" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/NUMSIN"/></td>
  10.    <td align="CENTER" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/SURV"/></td>
  11.    <td align="CENTER" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/GARANTIE"/></td>
  12.    <td align="RIGHT" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/REGLEM"/></td>
  13.    <td align="RIGHT" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/EVAL"/></td>
  14.    <td align="RIGHT" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/RECOURS"/></td>
  15.    <td align="RIGHT" class="LL"><xsl:value-of select="REQUETE2/ROWSET/ROW/EVALREC"/></td>
  16.   </xsl:if>
  17.  </tr>
  18. <xsl:for-each select="REQUETE2/ROWSET/ROW[@num&gt;1]">
  19.    <tr>
  20.    <td colspan="4"/>
  21.    <td align="CENTER" class="LL"><xsl:value-of select="NUMSIN"/></td>
  22.    <td align="CENTER" class="LL"><xsl:value-of select="SURV"/></td>
  23.    <td align="CENTER" class="LL"><xsl:value-of select="GARANTIE"/></td>
  24.    <td align="RIGHT" class="LL"><xsl:value-of select="REGLEM"/></td>
  25.    <td align="RIGHT" class="LL"><xsl:value-of select="EVAL"/></td>
  26.    <td align="RIGHT" class="LL"><xsl:value-of select="RECOURS"/></td>
  27.    <td align="RIGHT" class="LL"><xsl:value-of select="EVALREC"/></td>
  28.    </tr>
  29.   </xsl:for-each>
  30.  </xsl:for-each>


 
Pb: je ne pe pas utiliser REQUETE2/ROWSET/ROW car j'ai defini "l'adresse de départ du fichier" comme DOCUMENT/REQUETE/ROWSET/ROW
 
je dois boucler sur le nombre de Row de la requete 1 tout en ayant acces aux infos de la requete 2

n°451126
hop le fou
Tu m'en diras tant
Posté le 08-07-2003 à 14:35:27  profilanswer
 

En fait il suffisait de préfixer tout...  :whistle:  
Utiliser /DOCUMENT/REQUETE2/ROWSET/ROW qui prime sur la valeur choisi en template...
 
 
Je sors...  :D

n°451916
hop le fou
Tu m'en diras tant
Posté le 09-07-2003 à 10:42:49  profilanswer
 

Du nouveau...
 
bon le premier probleme est résolu mais j'en ai un autre sur les bras qui est a peu pres identique
 
je dois afficher les résultats de ma requete 1 et les résultats de la requete 2 correspondants
 
donc je fais une petite condition dans l'affichage:
 

Code :
  1. for-each select="/DOCUMENT/REQUETE2/ROWSET/ROW[/DOCUMENT/REQUETE2/ROWSET/ROW/NUMCONTR=/DOCUMENT/REQUETE1/ROWSET/ROW/NUMCONT]


 
ce qui se passe? le test est considéré comme toujours faux (cad il n ya aucune correspondance alors qu en réalité il y en a)
 
quel est le probleme?
est ce que le prefixage du chemin d acces ne marche pas ici?
est ce que je n'ai pas le droit de faire des conditions sur des éléments? (oui ce ne sont pas des attributs)
quoi d autre?
 
à l'aide

n°451947
hop le fou
Tu m'en diras tant
Posté le 09-07-2003 à 11:17:27  profilanswer
 

bon apparement c t le fait que ce soit des éléments que ca deconnait
le pb maitenant c que je compare deux éléments différents, mais ceux ci doivent etre comparé plusieurs fois
 
exemple: je dois savoir quels sont les éléments de requete2 correspondant à l'élément de requete1 trouvé :X
je dois parcourir tout les éléments de requete2 pour faire les comparaisons
mais si j utilise un for-each, je perd la localisation de X et je ne fais plus le test voulu mais seulement avec le premier élément de requete1 car j aurai du donner le chemin complet...  :pt1cable:  
 
le pb vient donc du fait que je dois parcourir 2 éléments différents d'un fichier xml, donc j'utilise le for-each, mais celui-ci ne peut garder qu une seule localisation (comme template match="..." )
comment faire?
 
qqun a t il une idée pour résoudre ce casse tete?
 

Code :
  1. <xsl:for-each select="DOCUMENT/REQUETE/ROWSET/ROW">
  2.  <tr>
  3.   <td align="CENTER"><xsl:value-of select="NUMCONT"/></td>
  4.   <td align="CENTER" class="LL"><xsl:value-of select="REFPROD"/></td>
  5.   <td align="RIGHT" class="LL"><xsl:value-of select="PRANN"/></td>
  6.   <td align="CENTER" class="LL"><xsl:value-of select="POSITION"/></td>
  7.   <xsl:if test="not(/DOCUMENT/REQUETE2/ROWSET/ROW)"> METTRE DES ESPACES </xsl:if> //si requete2 vide
  8.   <xsl:if test="/DOCUMENT/REQUETE2/ROWSET/ROW/NUMCONTR!=NUMCONT"> METTRE DES ESPACES </xsl:if> //si pour requete1 donné il ne correspond pas de requete2
  9.   <xsl:if test="/DOCUMENT/REQUETE2/ROWSET/ROW">
  10.    <xsl:if test="/DOCUMENT/REQUETE2/ROWSET/ROW/NUMCONTR=NUMCONT">
  11. //si pour requete1 donné il existe des valeurs de requete2, on les écrit
  12.     <td align="CENTER" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/NUMSIN"/></td>
  13.     <td align="CENTER" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/SURV"/></td>
  14.     <td align="CENTER" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/GARANTIE"/></td>
  15.     <td align="RIGHT" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/REGLEM"/></td>
  16.     <td align="RIGHT" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/EVAL"/></td>
  17.     <td align="RIGHT" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/RECOURS"/></td>
  18.     <td align="RIGHT" class="LL"><xsl:value-of select="/DOCUMENT/REQUETE2/ROWSET/ROW/EVALREC"/></td>
  19.    </xsl:if>
  20.   </xsl:if>


 
Edit: avec le code c mieux...
oui mais pas tres clair...
voila c mieux...


Message édité par hop le fou le 09-07-2003 à 11:25:56
n°451954
avander
Posté le 09-07-2003 à 11:30:37  profilanswer
 

Donne un exemple clair/concis de ce que tu voudrais, ton xml en entrée et le tableau en sortie!
 
J'ai suivis la discussion mais j'ai toujours pas compris comment sont reliées les requetes 1 et 2...
 
 
 
 


---------------
A thing of beauty is a joy forever (John Keats)
n°451986
hop le fou
Tu m'en diras tant
Posté le 09-07-2003 à 12:03:19  profilanswer
 

Avander a écrit :

Donne un exemple clair/concis de ce que tu voudrais, ton xml en entrée et le tableau en sortie!
 
J'ai suivis la discussion mais j'ai toujours pas compris comment sont reliées les requetes 1 et 2...
 


 
la requete 1 renvoie des contrats d'assurance(numéro...)
la requete 2 renvoie les sinistres correspondant a un contrat (il peut y avoir 0 a n contrats)
 

Code :
  1. requete1:
  2. <REQUETE>
  3. <ROWSET>
  4. <ROW num="1">
  5.   <NUMCONT>1A0004766</NUMCONT>
  6.   <REFPROD>AUTOCLA</REFPROD>
  7.   <PRANN>686.2</PRANN>
  8.   <POSITION>En Cours</POSITION>
  9. </ROW>
  10. <ROW num="2">
  11.   <NUMCONT>1A0004770</NUMCONT>
  12.   <REFPROD>AUTOCLA</REFPROD>
  13.   <PRANN>592.49</PRANN>
  14.   <POSITION>En Cours</POSITION>
  15. </ROW>
  16. ...
  17. </ROWSET>
  18. </REQUETE>
  19. requete2
  20. <REQUETE2>
  21. <ROWSET>
  22. <ROW num="1">
  23.   <NUMSIN>02205864</NUMSIN>
  24.   <NUMCONTR>1A0004770</NUMCONTR>
  25.   <SURV>10/05/2002</SURV>
  26.   <REGLEM>959.57</REGLEM>
  27.   <EVAL>959.57</EVAL>
  28.   <RECOURS>0</RECOURS>
  29.   <EVALREC>0</EVALREC>
  30.   <GARANTIE>DAAF</GARANTIE>
  31. </ROW>
  32. <ROW num="2">
  33.   <NUMSIN>02205864</NUMSIN>
  34.   <NUMCONTR>1A0004770</NUMCONTR>
  35.   <SURV>10/05/2002</SURV>
  36.   <REGLEM>0</REGLEM>
  37.   <EVAL>0</EVAL>
  38.   <RECOURS>0</RECOURS>
  39.   <EVALREC>0</EVALREC>
  40.   <GARANTIE>DRPJ</GARANTIE>
  41. </ROW>
  42. </ROWSET>
  43. </REQUETE2>


 
comme on pe le voir, pour le premier contrat il n ya pas eu de sinistres
pour le 2eme il y en a eu 2
 
je voudrais afficher les infos comme ca:
 
Contrat 1A0004766  
Contrat 1A0004770 Sinistre 02205864 Valeurs suivantes
                  Sinistre 02205864 Valeurs suivantes
...

n°452010
avander
Posté le 09-07-2003 à 12:26:56  profilanswer
 

Et ton tableau tu le veux comment? Comme ceci?
 


<table>
<tr><td>REQUETE1</td><td>REQUETE2a<BR />REQUETE2a<BR /></td>
</table>


 
 


---------------
A thing of beauty is a joy forever (John Keats)
n°452014
hop le fou
Tu m'en diras tant
Posté le 09-07-2003 à 12:31:05  profilanswer
 

Avander a écrit :

Et ton tableau tu le veux comment? Comme ceci?
 


<table>
<tr><td>REQUETE1</td><td>REQUETE2a<BR />REQUETE2a<BR /></td>
</table>


 
 
 


non pas tout a fait
<table>
 <tr>
  <td>Requete1</td><td>Requete2</td>
  <td> </td><td>Requete2</td>
 </tr>
</table>
 
en gros chaque sinistre doit apparaitre sur une ligne différente
je suis obligé de remplir des cases avec des espaces pour respecter les traits du tableau

mood
Publicité
Posté le 09-07-2003 à 12:31:05  profilanswer
 

n°452041
avander
Posté le 09-07-2003 à 12:54:29  profilanswer
 

J'ai pondu une solution vite fait pcq. je commence à avoir faim ;-):
 


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<DOCUMENT>
  <REQUETE>
   <ROWSET>
     <ROW num="1">
      <NUMCONT>1A0004766</NUMCONT>
      <REFPROD>AUTOCLA</REFPROD>
      <PRANN>686.2</PRANN>
      <POSITION>En Cours</POSITION>
     </ROW>
     <ROW num="2">
      <NUMCONT>1A0004770</NUMCONT>
      <REFPROD>AUTOCLA</REFPROD>
      <PRANN>592.49</PRANN>
      <POSITION>En Cours</POSITION>
     </ROW>
   </ROWSET>
  </REQUETE>
  <REQUETE2>
   <ROWSET>
     <ROW num="1">
      <NUMSIN>02205864</NUMSIN>
      <NUMCONTR>1A0004770</NUMCONTR>
      <SURV>10/05/2002</SURV>
      <REGLEM>959.57</REGLEM>
      <EVAL>959.57</EVAL>
      <RECOURS>0</RECOURS>
      <EVALREC>0</EVALREC>
      <GARANTIE>DAAF</GARANTIE>
     </ROW>
     <ROW num="2">
      <NUMSIN>02305864</NUMSIN><!-- changé no !! -->
      <NUMCONTR>1A0004770</NUMCONTR>
      <SURV>10/05/2002</SURV>
      <REGLEM>0</REGLEM>
      <EVAL>0</EVAL>
      <RECOURS>0</RECOURS>
      <EVALREC>0</EVALREC>
      <GARANTIE>DRPJ</GARANTIE>
     </ROW>
   </ROWSET>
  </REQUETE2>
</DOCUMENT>
<!-- eof -->


 

Le stylesheet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xmlns="http://www.w3.org/1999/xhtml">
 
<!-- general settings -->
 
  <xsl:output
    method="xml" omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
 
  <xsl:strip-space elements="*"/>
 
  <xsl:decimal-format decimal-separator="," grouping-separator="."/>
 
<!-- parameters -->
  <xsl:param name="pLang" select="'fr'"/>
 
<!-- global variables -->
 
<!-- transformations -->
 
  <xsl:template match="/">
    <html xml:lang="{$pLang}" lang="{$pLang}">
      <head>
        <title>Tableau sinistre ;-)
        </title>
      </head>
      <body>
 
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
 
  <xsl:template match="DOCUMENT">
    <table border="1">
      <xsl:apply-templates select="REQUETE/ROWSET/ROW"/>
    </table>
  </xsl:template>
 
  <xsl:template match="ROW">
    <xsl:variable name="vContrat"><xsl:value-of select="NUMCONT"/></xsl:variable>
    <tr>
      <td>Contrat: <xsl:value-of select="$vContrat"/></td>
      <td>Sinistres:
        <xsl:for-each select="//REQUETE2/ROWSET/ROW[NUMCONTR=$vContrat]">
          <xsl:value-of select="NUMSIN"/>
          <br />
        </xsl:for-each>
 
      </td>
    </tr>
  </xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 

le résultat HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Tableau sinistre ;-)
        </title>
</head>
<body>
<table border="1">
<tr>
<td>Contrat: 1A0004766</td>
<td>Sinistres:
        </td>
</tr>
<tr>
<td>Contrat: 1A0004770</td>
<td>Sinistres:
        02205864<br />02305864<br />
</td>
</tr>
</table>
</body>
</html>


 
Le tableau n'est pas exactement ce que tu veux ( mais je suis pas sur que ton dernier exemple est vraiment juste...)!
 
A+


---------------
A thing of beauty is a joy forever (John Keats)
n°452160
hop le fou
Tu m'en diras tant
Posté le 09-07-2003 à 14:46:23  profilanswer
 

bon...
le fait d'utiliser une variable est une tres bonne idée: c meme ca que je cherchais en fait
pour le reste, comme je dois respecter un certain aspect graphique, je dois adapter l'idée a ma table
en tout cas merci  :jap:


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

  [XML/XSL] Mise en forme de 2 requetes en meme tps

 

Sujets relatifs
[PHP] mise à jour automatique de la pageXML et VB.NET
PB de mise en page d'un état [access 97][XSL - XML] fusion colonne et nombre a virgule
[PHP/MySQL] Comment faire des stats sur les requetes ?probleme de mise en page
Classe pour manipuler des XML[HTML] Mise en page CSS je calle.
[XSL + XSQL] erreur ORA-01008: not all variables bound 
Plus de sujets relatifs à : [XML/XSL] Mise en forme de 2 requetes en meme tps


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