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 :

xml vers xml via xsl


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut xml vers xml via xsl
    Bonjour,

    J'essaie de faire une modification xml vers xml via xsl mais ça fait 6 ans que je n'ai pas fait de xsl et je suis un peu rouillé... J'ai parcouru le forum, mais j'ai pas trouvé mon bonheur, alors voici ce que j'aimerais faire.

    xml en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <root>
      <doc>
       <balise1>
             <fils1>toto</fils1>
       </balise1>
       <complement>
          <fils2>tata</fils2>
          <fils3>titi</fils3>
       </complement>
      </doc>
    </root>
    et je voudrais en xml sortie (faire des modifications juste sur <complément> et ses fils :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <root>
      <doc>
       <balise1>
             <fils1>toto</fils1>
       </balise1>
       <compl. >
          <fils3renomme>titi</fils3renomme>
       </compl.>
      </doc>
    </root>
    Pour le moment, je copie tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	<xsl:template match="* | @*">
    		<xsl:copy>
    			<xsl:copy-of select="@*" />
    			<xsl:apply-templates />
    		</xsl:copy>
    	</xsl:template>
    Mais je ne pense pas que c'est la bonne méthode pour commencer...si quelqu'un peut m'aider à me remettre sur les rails, merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par patrick-lyon Voir le message
    Mais je ne pense pas que c'est la bonne méthode pour commencer...
    Ben si. Reste à faire un template pour t'occuper des cas particuliers où tu ne veux pas copier tel quel.

    En l'occurrence j'ai pas compris quelles modifs tu voulais faire.


    Détails :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="* | @*">
    Je ne pense pas que tu as besoin de faire un match sur @*. En effet tu n'appelles jamais de template dessus, puisque tu fais copy-of pour copier les attributs.

    Ce serait utile par exemple si tu faisais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="* | @*">
      <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
      </xsl:copy>
    </xsl:template>
    Mais bon, t'en as pas besoin.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour ton retour

    En fait, ce que je veux faire, c'est :
    <complement> devient en sortie <compl. >
    <fils2>tata</fils2> n'est pas du tout copié
    <fils3> devient en sortie <fils3renomme>

    ce qui m'embête dans cette copie, c'est que je prends tout, donc je ne vois pas ensuite comment dire que finalement, je veux modifié seulement la balise <complement> et ses fils.

    Je suppose qu'on est obligé de tout décrire ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Bon, ben du coup l'exemple était plutôt parlant.

    Citation Envoyé par patrick-lyon Voir le message
    <complement> devient en sortie <compl. >
    Je précise que l'espace est purement décoratif, il ne fait pas partie du nom de la balise, et tu ne pourras pas forcer sa présence.

    Citation Envoyé par patrick-lyon Voir le message
    ce qui m'embête dans cette copie, c'est que je prends tout, donc je ne vois pas ensuite comment dire que finalement, je veux modifié seulement la balise <complement> et ses fils.

    Je suppose qu'on est obligé de tout décrire ?
    En fait il y a un système de priorité intelligente.

    Le très général match="*" ne sera appliqué que s'il n'y a pas d'autre template, plus précis, qui corresponde aussi, comme par exemple match="complement". Qui lui-même laisse la priorité à match="doc/complement" et match="complement[1]".

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Le très général match="*" ne sera appliqué que s'il n'y a pas d'autre template, plus précis
    => Je ne me rappelais plus de cette règle de base...
    Ok, merci beaucoup, j'arrive à mon résultat, merci

Discussions similaires

  1. xml vers csv via xsl pur
    Par tofpad dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/03/2010, 09h35
  2. Réponses: 2
    Dernier message: 05/03/2008, 19h30
  3. [XSLT] probleme de copie de balise de XML vers HTML via XSL
    Par Clercq dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/11/2006, 13h52
  4. [débutant]XML vers XML avec XSL
    Par tokamak dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/07/2005, 10h27
  5. XML vers XML avec XSL
    Par guizz79 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2005, 09h43

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