Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1934 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]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR