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] problème de transformation


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 32
    Points
    32
    Par défaut [XSLT] problème de transformation
    Bonjour tout le monde,
    je suis un debutant en xml, et j'aimerai en utilisant xslt passer de la la structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ligne type="fonction_start" name="remove" num="1" />
    <ligne type="fonction_start" name="update" num="2" />
    <ligne type="fonction_start" name="add"  num="3"/>
    <ligne type="texte" value="destruction" num="1" />
    <ligne type="texte" value="ajout" num="3"/>
    <ligne type="fonction_end" name="add" num="3" />
    <ligne type="fonction_end" name="update" num="2" />
    <ligne type="fonction_end" name="remove" num="1"/ />
    a la structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <fonction name="remove">
    <texte value="destruction" />
    <fonction name="update">
    <fonction name="add">
    <texte value="ajout" />
    </fonction>
    </fonction>
    </fonction>
    avec l'attribut num permet dans le cas d'ambiguité de dire que le texte appartient à telle fonction:

    danc des cas on peut trouver le même numero dans ce cas on garde le même ordre.
    Dans d'autres cas on peut trouver des fonction sans ouverture et donc on ne peut pas faire toujours une equivalent entre fonction_end et </fonction>


    Merci Beaucoup

  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
    "fonction_start" n'est pas toujours présent ? On peut donc trouver un "texte" avec un "num" sans "fonction_start" ?

    Les "num" sont-ils attribués selon la profondeur (1 au-dessus de 2, 2 au dessus de 3,...) ?
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    oui on peut trouver un "texte" avec un "num" sans "fonction_start", le texte peut être ecrit sans faire appel à une fonction

    Le num c'est pas la profondeur, c'est en quelque sorte le programme qui l'a créé.

  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
    Est-ce que l'on peut déterminer une place pour le "fonction_start" manquant autre que juste avant le premier "texte" avec le "num" orphelin ?

    Le "fonction_end" est-il toujours bien présent, lui ?
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    parfois on ne peut pas déterminer une place pour le "fonction_start" car c'est pas moi qui génère le fichier.

    de la même manière on peut parfois ne pas trouver une fonction_end

  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
    Ce qui me semble le plus gênant ce serait un "fonction_end" sans "fonction_start" correspondant... Cela peut-il arriver ?
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    oui ça peut arriver, mais on peut pour le moment supposer que ca ne va pas arriver vu que la probabilité d'apparition est minime

  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
    J'ai ajouté une racine "fichier" au document source et voilà ce que je propose :
    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
     <xsl:stylesheet version="1.0">
      <xsl:template match="/">
       <fichier>
            <xsl:call-template name="struct">
                <xsl:with-param name="prev"/>
            </xsl:call-template>
       </fichier>
      </xsl:template>
        <xsl:template name="struct">
            <xsl:param name="prev"/>
            <xsl:variable name="current" select="/fichier/ligne[not(contains($prev,concat('.',@num,'.')))][1]"/>
            <xsl:choose>
                <xsl:when test="$current/@type = 'fonction_start'">
                    <fonction name="{$current/@name}">
                        <xsl:for-each select="/fichier/ligne[@type='texte' and @num=$current/@num]">
                            <texte value="{@value}"/>
                        </xsl:for-each>
                        <xsl:call-template name="struct">
                            <xsl:with-param name="prev" select="concat($prev,'.',$current/@num,'.')"/>
                        </xsl:call-template>
                    </fonction>
                </xsl:when>
                <xsl:when test="$current/@type = 'texte'">
                    <xsl:for-each select="/fichier/ligne[@type='texte' and @num=$current/@num]">
                        <texte value="{@value}"/>
                    </xsl:for-each>
                    <xsl:call-template name="struct">
                        <xsl:with-param name="prev" select="concat($prev,'.',$current/@num,'.')"/>
                    </xsl:call-template>
                </xsl:when>
            </xsl:choose>
        </xsl:template>
     </xsl:stylesheet>
    L'idée directrice est de mémoriser tous les "num" déjà traités pour ne considérer que les autres...

    Attention, cet algo ne marche que si une fonction ne peut en contenir qu'une seule autre (cas de l'exemple donné). Il faut le complexifier si ce n'est pas le cas !
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Merci alain, tu as raison il se peut que la fonction appelle plusieurs fonctions. Ce que vous m'avez fourni est déja bien, je vais essayer de continuer en se basant sur votre solution.
    Merci une autre fois.

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

Discussions similaires

  1. [SAX] [XSLT] Problème transformation XSL avec SAX et namespace
    Par thierry_b dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 17/12/2008, 14h24
  2. [XSLT] Problème de transformation XSLT avec JAVA
    Par ploxien dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 28/09/2007, 16h47
  3. [XSLT]Problème de transformation d'un document XML.
    Par JM_Cholet dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/01/2007, 13h29
  4. [WordML][XSLT] Problème de transformation
    Par fouhaa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/05/2006, 15h22
  5. [XSLT] Problème de transformation XML avec un fichier xslt
    Par seb35 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/04/2006, 22h02

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