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 :

probleme de transformation d'un XML via XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut probleme de transformation d'un XML via XSLT
    salut j'ai un souci en fait avec un fichier xml que j'aimerais mettre en forme
    fichier initial :
    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
     
    <html> 
      <body>blaaaaaaaaaaaa 
      <title>salut tout le monde</title> 
     
      <tagPerso> 
        <table> 
          <tr> 
            <th>entree ligne 1</th> 
     
            <td>colonne 1.1</td> 
     
            <td>colonne 2.1</td> 
          </tr> 
     
          <tr> 
            <th>ligne 2</th> 
     
            <td>colonne 2.1</td> 
     
            <td>colonne 2.2</td> 
          </tr> 
        </table> 
      </tagPerso> 
     
      blaaaaaaa</body> 
    </html>
    grace à ce fichier xslt :
    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
     
    <?xml version="1.0" encoding="iso-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
       <xsl:output method="xml" encoding="iso-8859-1" indent="yes"/> 
       <xsl:strip-space elements="*"/> 
       <xsl:preserve-space elements="donnee|ligne|colonne|titre_ligne|th"/> 
       <!--debut u traitment :on detecte la partie à traiter--> 
       <xsl:template match="tagPerso/table"> 
          <!--on place une balise donées--> 
          <donnee> 
     
             <xsl:call-template name="tr"/> 
             <xsl:apply-templates/> 
          </donnee> 
       </xsl:template> 
       <!--on arrive à une ligne :on remplace les balises par ce qu'il faut--> 
       <xsl:template match="tr" name="tr"> 
          <xsl:for-each select="tr"> 
             <ligne> 
                <xsl:value-of select="tr"/> 
                <xsl:call-template name="th"/> 
                <xsl:call-template name="td"/> 
                <xsl:apply-templates/> 
             </ligne> 
          </xsl:for-each> 
       </xsl:template> 
       <!--on arrive à une colonne :on remplace les balises par ce qu'il faut--> 
       <xsl:template match="td" name="td"> 
          <xsl:for-each select="td"> 
             <colonne> 
     
                <xsl:value-of select="td"/> 
     
                <xsl:apply-templates/> 
             </colonne> 
          </xsl:for-each> 
       </xsl:template> 
       <!--on arrive au titre de la ligne :on remplace les balises par ce qu'il faut--> 
       <xsl:template match="th" name="th"> 
          <xsl:for-each select="th"> 
             <titre_ligne> 
                <xsl:value-of select="th"/> 
                <xsl:apply-templates/> 
             </titre_ligne> 
          </xsl:for-each> 
       </xsl:template> 
       <!--on remplace les caractères speciaux par ce qu'il faut--> 
       <!-- 
       <xsl:template name="remplacer"> 
          <xsl:param name="caractere"></xsl:param> 
          <xsl:variable name="match">&#xa0;/()"&lt;&gt;&amp;°:</xsl:variable> 
          <xsl:variable name="remplacer">__0</xsl:variable> 
          <xsl:value-of select="translate(normalize-space($caractere),$match,$remplacer)"/> 
       </xsl:template> 
       --> 
    </xsl:stylesheet>
    j'arrive à avoir un fichier où les balises html sont ignorées ,cependant le contenu de ces dernieres reste dans le fichier :
    fichier après une transformation XSLT :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    blaaaaaaaaaaaa 
      salut tout le monde<donnee> 
    <ligne> 
    <titre_ligne>entree ligne 1</titre_ligne> 
    <colonne>colonne 1.1</colonne> 
    <colonne>colonne 2.1</colonne> 
    </ligne> 
    <ligne> 
    <titre_ligne>ligne 2</titre_ligne> 
    <colonne>colonne 2.1</colonne> 
    <colonne>colonne 2.2</colonne> 
    </ligne> 
    </donnee> 
     
      blaaaaaaa
    pouvez vous me dire ce qui ne va pas dans mon fichier xslt ou ce qu'il faudrait changer eventuellement pour que ça marche merci...

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il faut prévoir un template pour ces balises, qui ne fasse rien d'autre que d'appliquer les templates sur les éléments enfants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="html|body|title">
      <xsl:apply-templates select="*"/>
    </xsl:template>

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    merci beaucoup ça marche à merveille
    encore juste une question:
    si mon document contient des caracteres tel &ecirc; ou &ecute; comment faire en xsl pour les remplacer directement pour avoir un xml valide ??
    merci encore

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Le problème est que XSLT ne peut transformer qu'un XML déjà valide... Il faut donc que tu modifies ton XML source, en incluant une DTD comprenant les déclarations de ces entités.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    en fait mon but etait de passer uniquement par XSLT pour modifier mon xml
    mais je vois bien je suis obligé d'utiliser jdom ou un parseur semblable

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par nayron_1
    mais je vois bien je suis obligé d'utiliser jdom ou un parseur semblable
    Tu auras le même problème avec n'importe quel parseur (ne pas oublier que XSLT fonctionne avec des parseurs ! ). La présence d'entités non XML (&eacute;, &agrave;, etc.) fait que ton XML n'est pas bien formé, donc inexploitable par un parseur. Donc, tu ne peux qu'intervenir sur ton XML, où là tu as plusieurs choix :
    - Remplacer les entités par leur caractère (en utilisant le bon codage, celui déclaré dans l'en-tête XML)
    - Déclarer les entités dans une DTD interne ou externe
    - Placer les blocs de texte qui les contiennent dans des <![CDATA[]]>

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    en fait le but de mon programme c'est de faire un petit navigateur java,selectionner un tableau recuperer le contenu de ce tableau et le mettre dans une base de donée .
    mon probleme vient du fait que quand je recupere mon fichier html ,je le valide avec jtidy pour avoir un xml valide ,or à cause des attributs des balises html ou des accents dans le document xml ainsi crée avec jtidy ceci ne marche pas ,et du coup je récupère un xml non valide .

Discussions similaires

  1. Supprimer des balises d'un fichier XML via XSLT
    Par LaBastoss dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/12/2012, 20h44
  2. [XSLT] Parsage XML via XSLT, comment être valide W3C ?
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/05/2010, 20h19
  3. [XSLT][XSD>XML]transformer xsd en xml avec xslt
    Par émile-henri dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/06/2005, 15h06
  4. transformation XML->TXT via XSLT
    Par manumanien dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 07/06/2005, 20h30
  5. transformation xml via xslt
    Par ronnie dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 10/05/2005, 10h58

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