IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Pb de transformation XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Pb de transformation XSL
    Bonjour à tous !

    Je suis novice en XML.

    J'ai un problème sur une transformation XSL. Pourriez-vous m'aider mettre au point mon fichier XSL afin d'avoir le résultat attendu çi-dessous, je sèche.

    J'exporte en XML le résultat d'une requête Access, et j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?xml version="1.0" encoding="UTF-8" ?> 
    - <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2009-03-17T10:32:52">
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|BAVETTE L|Flap|S235JRG2/DD11|3</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|BEC L|Nose|S235JRG2/DD11|3</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|CADRE L|Outlet frame|S235JRG2/DD11|8</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|FLASQUE ASPIRATION L|Inlet flange|S235JRG2/DD11|6</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|FLASQUE MECANIQUE L|Mechanical Flange|S235JRG2/DD11|6</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|PORTE VISITE L|Access Door|S235JRG2/DD11|3</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|VOLUTE L|Scroll|S235JRG2/DD11|3</lignetxtart> 
    </R-Miseenforme>
    - <R-Miseenforme>
    <PROJET>224932</PROJET> 
    <code>ESSAI</code> 
    <desc>DESCRIPTION ARTICLE</desc> 
    <nature>DECTOLE</nature> 
    <textearticle_langue>4</textearticle_langue> 
    <lignetxtart>|1|VOLUTE L|Scroll part2|S235JRG2/DD11|3</lignetxtart> 
    </R-Miseenforme>
    </dataroot>
    La mise en forme finale que je souhaiterais est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    - <projet code="224932">
    - <article>
      <code>ESSAI</code> 
      <desc>DESCRIPTION ARTICLE</desc> 
      <nature>DECTOLE</nature> 
    - <textearticle langue="4">
      <lignetxtart>|1|BAVETTE L|Flap|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|BEC L|Nose|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|CADRE L|Outlet frame|S235JRG2/DD11|8</lignetxtart> 
      <lignetxtart>|1|FLASQUE ASPIRATION L|Inlet flange|S235JRG2/DD11|6</lignetxtart> 
      <lignetxtart>|1|FLASQUE MECANIQUE L|Mechanical Flange|S235JRG2/DD11|6</lignetxtart> 
      <lignetxtart>|1|PORTE VISITE L|Access Door|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|VOLUTE L|Scroll|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|VOLUTE L|Scroll part2|S235JRG2/DD11|3</lignetxtart> 
      </textearticle>
      </article>
      </projet>

    Merci d'avance !

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Bonjour,

    Premièrement, quelle version de XSLT comptez-vous utiliser ?

    Sinon, l'exemple que vous fournissez ne renseigne pas complètement qur ce qui peut varier d'un document en entrée à un autre : plusieurs articles, plusieurs langues pour un article ?

  3. #3
    Membre actif Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Points : 270
    Points
    270
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="xml" media-type="text/xml" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
      <xsl:template match="dataroot">
          <xsl:element name="PROJET">
              <xsl:value-of select="//PROJET" />		
          </xsl:element>
         <xsl:element name="article">	
          	  <xsl:element name="code">
    	       <xsl:value-of select="//code" />		
          	  </xsl:element>
          	  <xsl:element name="desc">
    		<xsl:value-of select="//desc" />		
          	  </xsl:element>
          	  <xsl:element name="nature">
    		<xsl:value-of select="//nature" />		
          	  </xsl:element>
          	  <xsl:element name="textearticle">
          	  	<xsl:attribute  name = "langue" >
          	  		<xsl:value-of select="//textearticle_langue" />
          	  	</xsl:attribute>	
    			  <xsl:for-each select="//R-Miseenforme">
    		   	   	    <xsl:value-of select="lignetxtart" />	
    		       </xsl:for-each>
    	      </xsl:element>
           </xsl:element>
      </xsl:template>
     
    </xsl:stylesheet>
    je ne sai pas si c'est ce que tu veux ou pas vu que ta pas été tres clair ...

  4. #4
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Il faut faire attention à l'usage de // : cela engendre un parcours total de l'arbre depuis la racine et, outre le fait que cela ne correspond pas nécessairement à la demande, c'est catastrophique pour les performances sur un document important.

    L'utilisation systématique de xsl:element et de xsl:attribute n'est pas, non plus, à recommander, pour des soucis de lisibilité. Il est tellement plus simple de noter directement les éléments et d'utiliser la notation {} pour les attributs !!

    Enfin l'instruction xsl:output doit refléter le format de sortie désiré. Ici XML et non pas HTML....

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Résultat innatendu
    Bonjour,

    ... et merci de votre aide !

    Lors du test de transformation avec la feuille de style, j'obtiens le message suivant :

    Le document XML doit contenir un élément de niveau supérieur. Erreur de traitement de la ressource ...
    D'où cela vient-il ?


    Autre précision, il y a toujours un seul article, et la valeur de langue est toujours "4".

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Il ne peut y avoir qu'un élément racine en XML 1.x et pas de noeud texte au plus haut niveau : est ce bien le reflet de vos données que le "-" dans
    "- <dataroot" ??

  7. #7
    Membre actif Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Points : 270
    Points
    270
    Par défaut
    A mon avis c'est ce qui arrive quand on fait directement un copier coller de la source xml à partir du navigateur ,un simple enregistrer sous aurait pu eviter les "-"
    Mai ssinon tu peux toujours les enlever à la main
    et si la langue est toujours de "4" alors et avec les conseil de alain.couthures...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="xml" media-type="text/xml" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
      <xsl:template match="dataroot">
          <xsl:element name="PROJET">
              <xsl:value-of select="R-Miseenforme/PROJET" />		
          </xsl:element>
         <xsl:element name="article">	
          	  <xsl:element name="code">
    	       <xsl:value-of select="R-Miseenforme/code" />		
          	  </xsl:element>
          	  <xsl:element name="desc">
    		<xsl:value-of select="R-Miseenforme/desc" />		
          	  </xsl:element>
          	  <xsl:element name="nature">
    		<xsl:value-of select="R-Miseenforme/nature" />		
          	  </xsl:element>
          	  <xsl:element name="textearticle">
          	  	<xsl:attribute  name = "langue" >4</xsl:attribute>	
    			  <xsl:for-each select="R-Miseenforme">
    		   	   	    <xsl:value-of select="lignetxtart" />	
    		       </xsl:for-each>
    	      </xsl:element>
           </xsl:element>
      </xsl:template>
    </xsl:stylesheet>
    alain.couthures excuse moi mais j'aimerai bien savoir ce que tu voulais dire par
    [citation]utiliser la notation {} pour les attributs[/citation]
    la.
    Aussi quesque tu me conseillerai contre les "//" ...
    Et au passage merci pour les remarques tu as sans doute remarqué que c'etait un copier coller et j'avais la paresse de tout rectifier alors

  8. #8
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <monelement monattribut="{$mavariable}"/>
    est équivalent en XSLT à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:element name="monelement">
      <xsl:attribute name="monattribut">
        <xsl:value-of select="$mavariable"/>
      </xsl:attribute>
    </xsl:element>

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci à vous, ça commence à prendre forme.

    Voila mon fichier XSL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    ......
    <xsl:element name="PROJET">
    	<xsl:element name="PROJET">
              <xsl:value-of select="//R-Miseenforme/PROJET" />		
          </xsl:element>
         <xsl:element name="article">	
          	  <xsl:element name="code">
    	       <xsl:value-of select="//R-Miseenforme/code" />		
          	  </xsl:element>
          	  <xsl:element name="desc">
    		<xsl:value-of select="//R-Miseenforme/desc" />		
          	  </xsl:element>
          	  <xsl:element name="nature">
    		<xsl:value-of select="//R-Miseenforme/nature" />		
          	  </xsl:element>
          	  <xsl:element name="textearticle">
          	  	<xsl:attribute  name = "langue" >4</xsl:attribute>
    	  </xsl:element>
    	  <xsl:element name="lignetxtart">
    			  <xsl:for-each select="//R-Miseenforme/lignetxtart">
    		   	   	    <xsl:value-of select="." />	
    		       </xsl:for-each>
    	      </xsl:element>
           </xsl:element>
    </xsl:element>
    ......
    et voila ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ......
    - <PROJET>
      <PROJET>224932</PROJET> 
    - <article>
      <code>ESSAILICAJGDE1</code> 
      <desc>DESCRIPTION ARTICLE</desc> 
      <nature>DECTOLE</nature> 
      <textearticle langue="4" /> 
      <lignetxtart>|1|BAVETTE L|Flap|S235JRG2/DD11|3|1|BEC L|Nose|S235JRG2/DD11|3|1|CADRE L|Outlet frame|S235JRG2/DD11|8|1|FLASQUE ASPIRATION L|Inlet flange|S235JRG2/DD11|6|1|FLASQUE MECANIQUE L|Mechanical Flange|S235JRG2/DD11|6|1|PORTE VISITE L|Access Door|S235JRG2/DD11|3|1|VOLUTE L|Scroll|S235JRG2/DD11|3|1|VOLUTE L|Scroll part2|S235JRG2/DD11|3</lignetxtart> 
      </article>
      </PROJET>
    ......

    Y a t-il un moyen pour faire un retour à la ligne entre chaque champ <lignetxtart>, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    - <projet code="224932">
    - <article>
      <code>ESSAI</code> 
      <desc>DESCRIPTION ARTICLE</desc> 
      <nature>DECTOLE</nature> 
    - <textearticle langue="4">
      <lignetxtart>|1|BAVETTE L|Flap|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|BEC L|Nose|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|CADRE L|Outlet frame|S235JRG2/DD11|8</lignetxtart> 
      <lignetxtart>|1|FLASQUE ASPIRATION L|Inlet flange|S235JRG2/DD11|6</lignetxtart> 
      <lignetxtart>|1|FLASQUE MECANIQUE L|Mechanical Flange|S235JRG2/DD11|6</lignetxtart> 
      <lignetxtart>|1|PORTE VISITE L|Access Door|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|VOLUTE L|Scroll|S235JRG2/DD11|3</lignetxtart> 
      <lignetxtart>|1|VOLUTE L|Scroll part2|S235JRG2/DD11|3</lignetxtart> 
      </textearticle>
      </article>
      </projet>
    Encore Merci !!!

  10. #10
    Membre actif Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Points : 270
    Points
    270
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <xsl:for-each select="R-Miseenforme">
               <xsl:element name="lignetxtart">
    		   <xsl:value-of select="lignetxtart" />	
              </xsl:element>
      </xsl:for-each>

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut C'est Parfait
    Merci encore !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#]Transformation XSL
    Par boleduch dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/10/2005, 13h39
  2. [XSL] Transformation xsl et jeu de caractères cyrillique
    Par Maximil ian dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/09/2005, 11h41
  3. Utilisation de MSXML pour la transformation XSL
    Par Supergizmo dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 25/07/2005, 14h02
  4. [PLUGIN] Plugin de transformation XSL ?
    Par elitost dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 20/10/2004, 09h39
  5. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo