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 :

Problème d'affichage d'un fichier xml avec un xsl à cause du xmlns


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Problème d'affichage d'un fichier xml avec un xsl à cause du xmlns
    Bonjour,
    ça fait des heures que je suis sur ce problème et je pense vraiment avoir besoin d'aide.
    J'ai un fichier xml que je reçois et que je ne peux donc pas modifier (hormis l'ajout de la ligne pour le xsl) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version='1.0' encoding='UTF-8'?>
    <?xml-stylesheet type="text/xsl" href="h:\My Documents\Projets\ConstituantStyleSheet3.xslt"?>
    <package_D15F xmlns="http://xml.mscibarra.com/ns/msci/deal/D15F" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xml.mscibarra.com/ns/msci/deal/D15F 20100715_20100715_CORE_DM_EAFE_SECURITY_MAIN_DAILY_D.xsd">
      <dataset_D15F>
        <entry calc_date="2010-07-15" security_name="titi">
    </entry>
        <entry calc_date="2010-07-18" security_name="toto">
    </entry>
      </dataset_D15F>
    </package_D15F>
    J'essaie de créer un fichier xsl pour formatter l'affichage de ce fichier :

    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
    <?xml version="1.0" encoding="utf-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://xml.mscibarra.com/ns/msci/deal/D15F" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xml.mscibarra.com/ns/msci/deal/D15F 20100715_20100715_CORE_DM_EAFE_SECURITY_MAIN_DAILY_D.xsd"
    >
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="*">
        <html>
            <head>
    	  <title></title>
    	</head>
    	<style type="text/css">
              table { border-style: solid; border-color: black; border-width: 2px; font-family: Verdana; font-size: 12px; }
              td { font-family: Verdana; font-size: 12px; border-style: solid; border-color: gray; border-width: 0px; border-bottom-width:1px; border-right-width:1px;}
              td.header { border-style: solid; border-color: black; border-width: 1px; font-family: Verdana; font-size: 12px; background-color: #DDDDDD; border-bottom-width:2px; padding: 5px; text-align:center; }
              h2 { font-family: Verdana;}
              h3 { font-family: Verdana;}
              td.line1 { background-color: #c6c3bd; }
              td.line2 { background-color: #cccccc; }
            </style>
          <body>
    	  <table>
    	    <tr>
                  <td class="header">
                    <b>Calculation date</b>
                  </td>
                  <td class="header">
                    <b>Security name</b>
                  </td>
    	    </tr>
    	    <xsl:apply-templates select="//entry" />
              </table>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="entry">
    <xsl:choose>
    	      <xsl:when test="position() mod 2 = 0">    
    	    <tr>
                  <td class="line1">
                    <xsl:value-of select="@calc_date" />
                  </td>
    	      <td class="line1">
                    <xsl:value-of select="@security_name" />
                  </td>
                </tr>
     		</xsl:when>
    		  <xsl:when test="position() mod 2 != 0">
    	    <tr>
                  <td class="line2">
                    <xsl:value-of select="@calc_date" />
                  </td>
    	      <td class="line2">
                    <xsl:value-of select="@security_name" />
                  </td>
                </tr>
    		</xsl:when>
        	    </xsl:choose>
      </xsl:template>
    </xsl:stylesheet>
    Evidemment, quand j'affiche mon xml, seules mes entêtes s'affichent...
    J'ai essayé de mettre "xsi:" dans mes sans succès ou bien ajouté un ":format" sur la déclaration du xmlns principal puis rajouter ":format" dans les template match mais sans succès non plus.

    Pouvez-vous m'aider svp?
    Merci d'avance pour vos réponses

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Les xsi: n'ont strictement rien à voir avec XSLT, et puisque le document généré est du HTML, il n'en a pas besoin non plus. Vire, et pour ce travail-là oublie que ça existe.

    ou bien ajouté un ":format" sur la déclaration du xmlns principal puis rajouter ":format" dans les template match mais sans succès non plus.
    En effet, puisque les éléments du XML source sont dans un namespace, il faut forcément les préfixer dans les template match...
    Et dans les expressions XPath des select aussi. Pas oublier.

    Les template match et les XPath n'ont pas de notion de "namespace par défaut." Si un élément n'est pas préfixé, alors il n'a pas de namespace.
    Contrairement aux balises littérales.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    tout d'abord merci pour ta réponse.
    Voici mon xslt avec l'ajout de :format sur le xlmns mais cela ne fonctionne toujours pas :
    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
    <?xml version="1.0" encoding="utf-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:format="http://xml.mscibarra.com/ns/msci/deal/D15F" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xml.mscibarra.com/ns/msci/deal/D15F 20100715_20100715_CORE_DM_EAFE_SECURITY_MAIN_DAILY_D.xsd"
    >
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="format:*">
        <html>
            <head>
    	  <title></title>
    	</head>
    	<style type="text/css">
              table { border-style: solid; border-color: black; border-width: 2px; font-family: Verdana; font-size: 12px; }
              td { font-family: Verdana; font-size: 12px; border-style: solid; border-color: gray; border-width: 0px; border-bottom-width:1px; border-right-width:1px;}
              td.header { border-style: solid; border-color: black; border-width: 1px; font-family: Verdana; font-size: 12px; background-color: #DDDDDD; border-bottom-width:2px; padding: 5px; text-align:center; }
              h2 { font-family: Verdana;}
              h3 { font-family: Verdana;}
              td.line1 { background-color: #c6c3bd; }
              td.line2 { background-color: #cccccc; }
            </style>
          <body>
    	  <table>
    	    <tr>
                  <td class="header">
                    <b>Calculation date</b>
                  </td>
                  <td class="header">
                    <b>Security name</b>
                  </td>
    	    </tr>
    	    <xsl:apply-templates select="//entry" />
              </table>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="format:entry">
    <xsl:choose>
    	      <xsl:when test="position() mod 2 = 0">    
    	    <tr>
                  <td class="line1">
                    <xsl:value-of select="format:entry/@calc_date" />
                  </td>
    	      <td class="line1">
                    <xsl:value-of select="format:entry/@security_name" />
                  </td>
                </tr>
     		</xsl:when>
    		  <xsl:when test="position() mod 2 != 0">
    	    <tr>
                  <td class="line2">
                    <xsl:value-of select="format:entry/@calc_date" />
                  </td>
    	      <td class="line2">
                    <xsl:value-of select="format:entry/@security_name" />
                  </td>
                </tr>
    		</xsl:when>
        	    </xsl:choose>
      </xsl:template>
    </xsl:stylesheet>
    Je ne vois pas où est mon erreur d'après ce que tu m'as dit...
    Merci pour ton aide.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="//entry" />
    Ici
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="format://entry" />
    mais j'obtiens une erreur de syntaxe donc j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="format:*//entry" />
    mais ça ne change rien. J'ai seulement le header de mon tableau qui s'affiche...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Pas très habitué aux namespaces, hum ?

    C'est entry qui est dans un namespace.
    C'est entry qui doit être préfixé pour indiquer qu'il y est.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Non, pas du tout... c'est le premier xsl que je fais et j'ai l'impression que c'était pas le plus simple mais j'aurais appris pas mal de choses
    J'ai changé ce que tu m'as dit mais cela ne fonctionne toujours pas. Voici le fichier complet :
    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
    <?xml version="1.0" encoding="utf-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:format="http://xml.mscibarra.com/ns/msci/deal/D15F" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xml.mscibarra.com/ns/msci/deal/D15F 20100715_20100715_CORE_DM_EAFE_SECURITY_MAIN_DAILY_D.xsd"
    >
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="format:*">
        <html>
            <style type="text/css">
              table { border-style: solid; border-color: black; border-width: 2px; font-family: Verdana; font-size: 12px; }
              td { font-family: Verdana; font-size: 12px; border-style: solid; border-color: gray; border-width: 0px; border-bottom-width:1px; border-right-width:1px;}
              td.header { border-style: solid; border-color: black; border-width: 1px; font-family: Verdana; font-size: 12px; background-color: #DDDDDD; border-bottom-width:2px; padding: 5px; text-align:center; }
              h2 { font-family: Verdana;}
              h3 { font-family: Verdana;}
              td.line1 { background-color: #c6c3bd; }
              td.line2 { background-color: #cccccc; }
            </style>
          <body>
    	  <table width="90%" cellspacing="0">
    	    <tr>
                  <td class="header">
                    <b>Calculation date</b>
                  </td>
                  <td class="header">
                    <b>Security name</b>
                  </td>
    	    </tr>
    	    <xsl:apply-templates select="//format:entry" />
              </table>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="format:entry">
    <xsl:choose>
    	      <xsl:when test="position() mod 2 = 0">    
    	    <tr>
                  <td class="line1">
                    <xsl:value-of select="@format:calc_date" />
                  </td>
    	      <td class="line1">
                    <xsl:value-of select="@format:security_name" />
                  </td>
                </tr>
     		</xsl:when>
    		  <xsl:when test="position() mod 2 != 0">
    	    <tr>
                  <td class="line2">
                    <xsl:value-of select="@format:calc_date" />
                  </td>
    	      <td class="line2">
                    <xsl:value-of select="@format:security_name" />
                  </td>
                </tr>
    		</xsl:when>
        	    </xsl:choose>
      </xsl:template>
    </xsl:stylesheet>
    Merci beaucoup pour ton aide

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum. Qu'est-ce qui ne marche pas au juste ? Normalement tu devrais avoir des résultats bien différents de ce que tu avais jusque-là.

    Et pour info, ce sont tes éléments qui sont dans un namespace. Pas tes attributs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Le problème venait de mes attributs, il ne fallait pas les considérer comme dans le namespace.
    Merci beaucoup, cela fonctionne maintenant.
    Voici mon xsl final :
    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
    <?xml version="1.0" encoding="utf-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:format="http://xml.mscibarra.com/ns/msci/deal/D15F" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xml.mscibarra.com/ns/msci/deal/D15F 20100715_20100715_CORE_DM_EAFE_SECURITY_MAIN_DAILY_D.xsd"
    >
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="format:*">
        <html>
            <style type="text/css">
              table { border-style: solid; border-color: black; border-width: 2px; font-family: Verdana; font-size: 12px; }
              td { font-family: Verdana; font-size: 12px; border-style: solid; border-color: gray; border-width: 0px; border-bottom-width:1px; border-right-width:1px;}
              td.header { border-style: solid; border-color: black; border-width: 1px; font-family: Verdana; font-size: 12px; background-color: #DDDDDD; border-bottom-width:2px; padding: 5px; text-align:center; }
              h2 { font-family: Verdana;}
              h3 { font-family: Verdana;}
              td.line1 { background-color: #c6c3bd; }
              td.line2 { background-color: #cccccc; }
            </style>
          <body>
    	  <table width="90%" cellspacing="0">
    	    <tr>
                  <td class="header">
                    <b>Calculation date</b>
                  </td>
                  <td class="header">
                    <b>Security name</b>
                  </td>
    	    </tr>
    	    <xsl:apply-templates select="//format:entry" />
              </table>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="format:entry">
    <xsl:choose>
    	      <xsl:when test="position() mod 2 = 0">    
    	    <tr>
                  <td class="line1">
                    <xsl:value-of select="@calc_date" />
                  </td>
    	      <td class="line1">
                    <xsl:value-of select="@security_name" />
                  </td>
                </tr>
     		</xsl:when>
    		  <xsl:when test="position() mod 2 != 0">
    	    <tr>
                  <td class="line2">
                    <xsl:value-of select="@calc_date" />
                  </td>
    	      <td class="line2">
                    <xsl:value-of select="@security_name" />
                  </td>
                </tr>
    		</xsl:when>
        	    </xsl:choose>
      </xsl:template>
    </xsl:stylesheet>

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

Discussions similaires

  1. [JDOM] Problème de lecture d'un fichier XML avec Java
    Par thonath dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 27/05/2014, 11h52
  2. problème d'affichage d'un fichier xml parsé sous java
    Par nhila8 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 05/04/2010, 20h00
  3. [1.x] probléme d'affichage d'un fichier xml pour une api symfony
    Par wiemesti dans le forum Symfony
    Réponses: 1
    Dernier message: 06/08/2009, 16h33
  4. Réponses: 1
    Dernier message: 08/06/2008, 19h05
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

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