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 :

[XSLT] écrire des attribut dans une balise


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 77
    Points
    77
    Par défaut [XSLT] écrire des attribut dans une balise
    bonjour à tous,

    pour resumer mon problème : on change de dtd et donc mes 'vieux' fichier xml sont à refaire ...

    Donc je me suis dit : "le plus simple serait d'utiliser le xslt pour modifier à la volée mes vieux xml en fichiers conforment avec la nouvelle dtd"

    le hic c'est que je ne comprend pas comment "réécrire" mes attributs de mes balises

    par exemple pourquoi un code comme celui là ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <xsl:template match="head">
     
    <head comment='<xsl:value-of select="@particularHelp"  />' >
     
    </xsl:template>
    qui devrait me donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <head comment='il n/'y a pas d/'aide pour cette fonction'>
    où alors j'ai pas compris comment fonctionne le xslt

  2. #2
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    Bienvenue dans le monde de xsl...
    et non, <head comment='<xsl:value-of select="@particularHelp" />' >
    ne marche pas...

    un attribut (ici "comment") ne peut pas contenir de caractère <

    comment faire alors ?
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:element name="head">
      <xsl:attribute name="comment"><xsl:value-of select="@particularHelp"  /></xsl:attribute>
    </xsl:element>
    sinon tu peux utiliser ant pour pouvoir convertir tout un répertoire de fichiers xml d'un coup... c'est pratique...
    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 77
    Points
    77
    Par défaut
    Forcement ... merci beacoup ....


  4. #4
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    Voila encore un petit exemple de conversion :

    Supposons que j'ai des fichier xml qui ont cette forme :

    Structure1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version ="1.0" encoding="ISO-8859-1" ?>
    <org>
      <pers name="tutu"/>
      <pers name="toto"/>
    </org>
    Et que je désire les convertir en cette forme :

    Structure2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <newOrg>
    	<pers>tutu</pers>
    	<pers>toto</pers>
    </newOrg>

    voici un fichier ant qui va permettre cette transformation :

    build.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <project name="install" default="toNewOrg" basedir="." >
     
      <target name="toNewOrg" >
        <xslt basedir="in" destdir="out" extension=".xml" style="toNewOrg.xslt"/>
      </target>
      <target name="toOrg" >
        <xslt basedir="out" destdir="back" extension=".xml" style="toOrg.xslt"/>
      </target>
     
    </project>

    par defaut (donc si tape juste "ant") c'est le target "toNewOrg" qui est executé,
    et qui va donc passer de la structure1 à la structure2

    si j'appelle ant avec comme argument toOrg, c'est la conversion inverse
    qui est effectuée, donc de la structure2 à la structure1 (que je met dans un répertoire "back" pour ne pas perdre le fichier original")

    Voici encore les deux feuilles de style qui permettent le conversion dans un sens et dans l'autre ;

    toNewOrg.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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
      <xsl:template match ="/">
          <newOrg>
          <xsl:text>
    </xsl:text> 
          <xsl:for-each select="org/pers">
            <xsl:text>	</xsl:text> 
            <pers><xsl:value-of select="@name"/></pers>
            <xsl:text>
    </xsl:text> 
          </xsl:for-each>
          </newOrg>
      </xsl:template>
    </xsl:stylesheet>
    toOrg.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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
      <xsl:template match ="/">
          <org>
          <xsl:text>
    </xsl:text> 
          <xsl:for-each select="newOrg/pers">
            <xsl:text>	</xsl:text> 
            <xsl:element name="pers">
              <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
            </xsl:element>
            <xsl:text>
    </xsl:text> 
          </xsl:for-each>
          </org>
      </xsl:template>
    </xsl:stylesheet>
    [edit]
    Je vois que le code concernant les xsl:text
    n'apparait pas bien... c'est juste pour faire des saut de lignes
    <xsl:text>& # 10;</xsl:text> (sans espace entre & # et 10)

    et des tabulations
    <xsl:text>& # 9;</xsl:text>
    [/edit]

    Et voila...
    A+

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

Discussions similaires

  1. [XSLT]Recuperer valeur concatenee dans une balise
    Par e_peigne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/10/2006, 13h49
  2. compter attributs dans une balise
    Par attavus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 17h22
  3. Modif des attributs d'une balise <param> en javascript
    Par Henri dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/08/2005, 22h20
  4. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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