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 ?
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  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 ...
    Ne testez jamais une erreur que vous ne savez pas gérer.
    de ne pas oublier

  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....
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  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" ??
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  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
    Ne testez jamais une erreur que vous ne savez pas gérer.
    de ne pas oublier

  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>
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  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>
    Ne testez jamais une erreur que vous ne savez pas gérer.
    de ne pas oublier

  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