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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [RESOLU] répéter une balise

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] répéter une balise

n°1747018
JojoSs75
Posté le 16-06-2008 à 13:08:56  profilanswer
 

Bonjour,
 
Je bloc sur la répétition de la balise <xsl:value-of select="Description"/>. Ce que je voudrais faire c’est rajouter la seconde balise <Description> s’il y en a…
Actuellement il répète la même balise…
Je début complètement en programmation,  
 
Ci-dessous un bout de codes
 

Et merci d’avance

 

Mon XML

Code :
  1. <GED_Bancs>
  2. <Logo>logo-glpi.png</Logo>
  3. <Lien>Images\logo-glpi.png</Lien>
  4. <Nom>CR_Jorge [Bancs]</Nom>
  5. <Type>CR</Type>
  6. <Redacteur>Jorge</Redacteur>
  7. <Revision>20080221</Revision>
  8. <Description> Trop Bien, mais pas encore top le collage XML</Description>
  9. <Description>Plus que cette etape est voila un pat de plus</Description>
  10. <Commentaire>Encore un peux et j'y arriverais</Commentaire>
  11. </GED_Bancs>


 

Mon XSL

Code :
  1. <xsl:template name="ContactBlock">   <!-- Block Contact -->
  2. <table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
  3.  <tBody>
  4.   <tr>   <!-- Description du document-->
  5.    <td>
  6.     <div class="Description">
  7.      <xsl:value-of select="Description"/>
  8.      <br/>
  9.      <xsl:value-of select="Description"/>
  10.     </div>
  11.    </td>
  12.   </tr>
  13.  </tBody>
  14. </table>
  15. </xsl:template>


 
Jo


Message édité par JojoSs75 le 07-03-2009 à 18:43:55
mood
Publicité
Posté le 16-06-2008 à 13:08:56  profilanswer
 

n°1747362
avander
Posté le 17-06-2008 à 09:26:37  profilanswer
 

Pas sur qu'on puisse utiliser une expression XPath ici, essaye:

Code :
  1. <xsl:value-of select="Description[1]"/>
  2. <xsl:value-of select="Description[2]"/>

n°1747363
masklinn
í dag viðrar vel til loftárása
Posté le 17-06-2008 à 09:31:37  profilanswer
 

Pourquoi ne pas simplement itérer sur les balises Description?
 

Code :
  1. <div class="Description">
  2.    <xsl:for-each select="Description">
  3.        <xsl:value-of select="."/><br/>
  4.    </xsl:for-each>
  5. </div>


[:spamafote]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1747375
esox_ch
Posté le 17-06-2008 à 10:04:33  profilanswer
 

Heu ... c'est pas vraiment dans l'optique XSL ça ...
ça serait mieux d'utiliser une solution à base de templates .. De tête je dirais quelque chose style mettre un apply template sur //Description (à voir si ça colle avec le reste de ton arbo), et créer un template qui te fait print le value + le br..

n°1750825
JojoSs75
Posté le 24-06-2008 à 19:24:09  profilanswer
 

avander a écrit :

Pas sur qu'on puisse utiliser une expression XPath ici, essaye:

Code :
  1. <xsl:value-of select="Description[1]"/>
  2. <xsl:value-of select="Description[2]"/>



 
Merci Avander de ta réponse,
Malheuresement elle repete la premiere balise deux fois et meme s'il y en a une elle le repete aussi.
 
jojoSs


Message édité par JojoSs75 le 28-06-2008 à 11:27:04
n°1750826
JojoSs75
Posté le 24-06-2008 à 19:26:16  profilanswer
 

masklinn a écrit :

Pourquoi ne pas simplement itérer sur les balises Description?
 

Code :
  1. <div class="Description">
  2.    <xsl:for-each select="Description">
  3.        <xsl:value-of select="."/><br/>
  4.    </xsl:for-each>
  5. </div>


[:spamafote]


 
Merci Masklinn de ta réponse,  
Malheuresement elle repete aussi la premiere balise deux fois.  
 
jojoSs


Message édité par JojoSs75 le 28-06-2008 à 11:27:15
n°1750844
JojoSs75
Posté le 24-06-2008 à 20:57:53  profilanswer
 

esox_ch a écrit :

Heu ... c'est pas vraiment dans l'optique XSL ça ...
ça serait mieux d'utiliser une solution à base de templates .. De tête je dirais quelque chose style mettre un apply template sur //Description (à voir si ça colle avec le reste de ton arbo), et créer un template qui te fait print le value + le br..


 
Bonjour esox_ch, merci pour la reponse.
 
Par contre je bloc un peux, voici le template que j'ai crée

Code :
  1. <tr>   <!-- Description du document-->
  2. <td colspan="3" rowspan="1">
  3.  <div class="Description">
  4.   <xsl:apply-templates select="Description">
  5.   </xsl:apply-templates>
  6.  </div>
  7. </td>
  8. </tr>


 
Par contre je vois pas du tous ou metre le retour chariot<br>. Actuellement j'ai une ligne complete avec tous les commentaires mis bout a bout.
j'ai tester aussi celuis ci mais ils ne bouclent pas

Code :
  1. <div class="Commentaire">
  2. <xsl:call-template name="Tps_Commentaire"/>
  3. </div>
  4. <xsl:template name="Tps_Commentaire">
  5. <xsl:for-each select=".">
  6.  <xsl:value-of select="Commentaire"/><br/>
  7. </xsl:for-each>
  8. </xsl:template>


 
jojoSs


Message édité par JojoSs75 le 28-06-2008 à 11:27:26
n°1752134
avander
Posté le 27-06-2008 à 09:56:11  profilanswer
 

Pourrais tu préciser quel parseur tu utilise, parce mon code fonctionne parfaitement avec MSXML...
 

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<GED_Bancs>
  <Logo>logo-glpi.png</Logo>
  <Lien>Images\logo-glpi.png</Lien>
  <Nom>CR_Jorge [Bancs]</Nom>
  <Type>CR</Type>
  <Redacteur>Jorge</Redacteur>
  <Revision>20080221</Revision>
  <Description> Trop Bien, mais pas encore top le collage XML</Description>
  <Description>Plus que cette etape est voila un pat de plus</Description>
  <Commentaire>Encore un peux et j'y arriverais</Commentaire>
</GED_Bancs>
<!-- eof -->


 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="html" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- parameters -->
 
<!-- global variables -->
 
<!-- transformations -->
  <xsl:key name="lookup" match="infoItem" use="@id"/>
 
  <xsl:template match="/">
    <xsl:text>Start XSLT
    </xsl:text>
    <xsl:apply-templates/>
  </xsl:template>
 
 
<xsl:template match="GED_Bancs">   <!-- Block Contact -->
 
<table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
  <tBody>
   <tr>   <!-- Description du document-->
    <td>
     <div class="Description">
      <xsl:value-of select="Description[1]"/>
      <br/>
      <xsl:value-of select="Description[2]"/>
     </div>
    </td>
   </tr>
  </tBody>
 </table>
 
</xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
et j'obtiens:

Start XSLT
    <table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tBody>
<tr>
<td>
<div class="Description"> Trop Bien, mais pas encore top le collage XML<br>
Plus que cette etape est voila un pat de plus</div>
</td>
</tr>
</tBody>
</table>

Message cité 1 fois
Message édité par avander le 27-06-2008 à 09:57:09
n°1752490
JojoSs75
Posté le 27-06-2008 à 22:01:14  profilanswer
 

avander a écrit :

Pourrais tu préciser quel parseur tu utilise, parce mon code fonctionne parfaitement avec MSXML...
 
 
 
 
et j'obtiens:

Start XSLT
    <table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tBody>
<tr>
<td>
<div class="Description"> Trop Bien, mais pas encore top le collage XML<br>
Plus que cette etape est voila un pat de plus</div>
</td>
</tr>
</tBody>
</table>



Bonjour avander
 
En faite j'utilie auun parseur, je tape mon code sous NotePad++ et le verifie directement sous EI.
je peut t'envoyer mon xml et xsl si tu veux?
 
Une question:
pourquoi utilises-tu: "xsl:key"
 
Et aussi: si on vient à rajouter une troisiéme balise <Description> dois-je rajouter <xsl:value-of select="Description[3]"/>etc...
 
Merci pour tous

Message cité 1 fois
Message édité par JojoSs75 le 28-06-2008 à 12:29:58
n°1752632
JojoSs75
Posté le 28-06-2008 à 11:58:00  profilanswer
 

:hello: Bonjour :hello:,
 
Suite à la remarque de "esox_ch", je suis passé sur un template. Malheureusement j'arrive toujours pas à répéter ma boucle. j'y comprend plus rien..... :??:  
:pfff: mes début dans le xml/xsl me font des cheveux gris :(
 
Voici mon xml:

Code :
  1. <GED_Moteur>
  2. <DOC>
  3.  <Logo>logo-glpi.png</Logo>
  4.  <Lien>Images\logo-glpi.png</Lien>
  5.  <Nom>Tr_Jorge [Moteur]</Nom>
  6.  <Type>Traitement</Type>
  7.  <Redacteur>Jorge</Redacteur>
  8.  <Revision>20060221</Revision>
  9. </DOC>
  10. <Infos>
  11.  <Description>Desc0.0_Fichier de traitement de données</Description>
  12.  <Commentaire>Com0.1_Generalisation pour le collage intuitif</Commentaire>
  13.  <Commentaire>Com0.2_de donnée Morphée sur feuille prés-formaté d'Excel</Commentaire>
  14. </Infos>
  15. </GED_Moteur>


 
Et voici mon xsl

Code :
  1. <xsl:template name="Block_DOC">
  2. <table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
  3.  <tBody>
  4.   <tr>
  5. <!-- Barre de gauche -->
  6.    <td class="Tableau_Gauche" colspan="1" rowspan="3"/>
  7. <!-- Le LOGO du fichier -->
  8.    <td  class="Logo" colspan="1" rowspan="3">
  9.     <div>
  10.      <a href="{$Liensrc}" target="_blank">
  11.       <img class="Logo_img" alt="" src="Images/Logo/{$logosrc}"/>
  12.      </a>
  13.     </div>
  14.    </td>
  15. <!-- Personne qui a rédigé le doc  -->
  16.    <td>
  17.     <div class="Redacteur">
  18.      <xsl:value-of select="Redacteur"/>
  19.     </div>
  20.    </td>
  21. <!-- Type de fichier  -->
  22.    <td>
  23.     <div class="Type">
  24.      <xsl:value-of select="Type"/>
  25.     </div>
  26.    </td>
  27. <!-- date -->
  28.    <td>
  29.     <div class="Revision">
  30.      <xsl:value-of select="Revision"/>
  31.     </div>
  32.    </td>
  33. <!-- barre de droite -->
  34.    <td class="Tableau_Droite" colspan="1" rowspan="3">
  35.    </td>
  36.   </tr>
  37.   <tr>
  38. <!-- Description du document-->
  39.    <td colspan="3" rowspan="1">
  40.     <div class="Description">
  41.      <xsl:value-of select="Description"/>
  42.     </div>
  43.    </td>
  44.   </tr>
  45.   <tr>
  46. <!-- Commentaire du document -->
  47.    <td class="Tableau_Space" colspan="6" rowspan="1">
  48.     <div class="Commentaire">
  49.      <xsl:call-template name="Tps_Commentaire6"/>
  50.     </div>
  51.    </td>
  52.   </tr>
  53. <!-- block partie intermédiaire -->
  54.   <tr>
  55. <!-- espace entre Block -->
  56.    <td class="Tableau_Space" colspan="6" rowspan="1"/>
  57.   </tr>
  58. </xsl:template>
  59. <xsl:template name="Tps_Commentaire6">
  60. <xsl:for-each select="./Infos">
  61.  <xsl:value-of select="Commentaire"/>
  62. </xsl:for-each>
  63. </xsl:template>


 
Je suis sure que ça devrais marché mais je doit oublier quelque chose... mais je vois pas quoi :cry:

mood
Publicité
Posté le 28-06-2008 à 11:58:00  profilanswer
 

n°1753479
avander
Posté le 30-06-2008 à 15:22:53  profilanswer
 

JojoSs75 a écrit :


...
Une question:
pourquoi utilises-tu: "xsl:key"
 
Et aussi: si on vient à rajouter une troisiéme balise <Description> dois-je rajouter <xsl:value-of select="Description[3]"/>etc...
 
Merci pour tous


 
Oublie le xsl:key c'est une relique issu d'un copier/coller...  
 
Description[3] c'est une façon de faire, autrement il faut prévoir un template pour l'élément Description et tester sa position avec position().

n°1753490
avander
Posté le 30-06-2008 à 15:34:00  profilanswer
 

JojoSs75 a écrit :

:hello: Bonjour :hello:,
 
Suite à la remarque de "esox_ch", je suis passé sur un template. Malheureusement j'arrive toujours pas à répéter ma boucle. j'y comprend plus rien..... :??:  
:pfff: mes début dans le xml/xsl me font des cheveux gris :(
...
Je suis sure que ça devrais marché mais je doit oublier quelque chose... mais je vois pas quoi :cry:


 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="html" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- parameters -->
 
<!-- global variables -->
 
<!-- transformations -->
  <xsl:key name="lookup" match="infoItem" use="@id"/>
 
  <xsl:template match="/">
    <xsl:text>Start XSLT
    </xsl:text>
    <xsl:apply-templates /><!-- càd. parcourir l'arbre xml et appliquer les templates concordant -->
  </xsl:template>
 
 
<xsl:template match="GED_Bancs"><!-- applique ce template à l'élément GED_Bancs -->
 
<table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
  <tBody>
   <tr>   <!-- Description du document-->
    <td>
     <div class="Description">
      <xsl:value-of select="Description[1]"/>
      <br/>
      <xsl:value-of select="Description[2]"/>
     </div>
    </td>
   </tr>
  </tBody>
 </table>
 
</xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
Es-tu bien sur d'avoir compris le méchanisme de base d'une transformation XSLT? C'est un processus assez différent de la programmation procédurale et/ou objet.  
Les débuts sont souvent laborieux... mais une fois que le déclic se produit, on ne peux qu'être admiratif devant la beauté de cette méchanique.  :ange:  
 
Le moteur de transformation traverse l'arbre xml et va vérifier pour chaque élément trouvé si il existe un template correspondant dans le stylesheet. D'où l'importance d'utiliser xsl:template match="nom d'un élément" et non xsl:template name="machin" qui est un named template ( comparable a une fonction).


Message édité par avander le 01-07-2008 à 11:44:01
n°1753504
avander
Posté le 30-06-2008 à 15:53:50  profilanswer
 

Exemple avec 3 descriptions et un template adhoc:
 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="html" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- parameters -->
 
<!-- global variables -->
 
<!-- transformations -->
  <xsl:template match="/"><!-- amorce les transformations -->
    <xsl:text>Start XSLT
    </xsl:text>
    <xsl:apply-templates/>
  </xsl:template>
 
 
<xsl:template match="GED_Bancs"><!-- template a appliquer lorsque le moteur trouve un élément 'GED_Bancs' -->
 
<table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
  <tBody>
   <tr>   <!-- Description du document-->
    <td>
     <div class="Description">
       <xsl:apply-templates select="Description" /><!-- on limite la traversee aux elements 'Description' -->
<!-- ancienne version desactivee
      <xsl:value-of select="Description[1]"/>
      <br/>
      <xsl:value-of select="Description[2]"/>
-->
     </div>
    </td>
   </tr>
  </tBody>
 </table>
 
</xsl:template>
 
<xsl:template match="Description"><!-- template a appliquer lorsque le moteur trouve un element 'Description' -->
  <xsl:value-of select="position()"/><xsl:text>.</xsl:text>
  <xsl:value-of select="text()"/>
  <xsl:if test="position()!=last()">
 <br />
  </xsl:if>
  <xsl:text>
</xsl:text><!-- bidouille pour ajouter un retour a la ligne en xsl -->
</xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
et le résultat:

Start XSLT
    <table id="Tableau_V02" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tBody>
<tr>
<td>
<div class="Description">1. Trop Bien, mais pas encore top le collage XML<br>
2.Plus que cette etape est voila un pat de plus<br>
3.Courage, c'est la troisième description!
</div>
</td>
</tr>
</tBody>
</table>

Message cité 1 fois
Message édité par avander le 01-07-2008 à 11:47:45
n°1753765
JojoSs75
Posté le 30-06-2008 à 23:53:07  profilanswer
 

avander a écrit :

Exemple avec 3 descriptions et un template adhoc:
 


<!-- eof -->


 
et le résultat:


 


 


 
OUaou,
 
merci beaucoup de toute ces explication,je vais lire ca doucement demain et le tester ce week-end
 
Encore merci beaucoup de ton aide...
 
Jojoss

n°1753911
avander
Posté le 01-07-2008 à 11:48:54  profilanswer
 

Pas de quoi, jette un oeuil au commentaires dans le code.  :jap:

n°1854378
JojoSs75
Posté le 23-02-2009 à 21:51:39  profilanswer
 

avander a écrit :

Pas de quoi, jette un oeuil au commentaires dans le code.  :jap:


 
 
Merci beaucoup Avander, ça marche du tuner.
 
Desoler j'ai pas pu repondre plus tot, j'ai recommencer mon code cette hiver.
 
C'est trop cool Merci beaucoup de ton aide.
 
JojoSs


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

  [RESOLU] répéter une balise

 

Sujets relatifs
[Résolu] Zone de Texte d'un Etats = fonction vba[Résolu] ob_start() et ob_end_flush()
[Résolu] Message d'erreur PHP envoyé dans le log d'Apache 2[RESOLU] extraire et afficher premier caractere de chaque chaine
[Resolu]Delphi/Directx : Plus d'image en grande résolution[RESOLU] savoir si une cellule appartient a une zone
[résolu]Classes pour faciliter l'utilisation de sockets C, en C++[MySql] requete group by + order by { RESOLU }
[Résolu] Récupere la valeur d'un Select[résolu] Compatibilité du codage des fichiers, serveurs windows et L..
Plus de sujets relatifs à : [RESOLU] répéter une balise


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)