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] xml plat à xml arborescent


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut [XSLT] xml plat à xml arborescent
    Mon objectif serait de créer une XSL qui me permettent de passer d'un xml plat à un xml arborescent. L'unique ressource trouvait, c'est ce post :
    http://www.developpez.net/forums/vie...354931#1354931
    Mais je n'y comprends rien, pourtant j'ai lutté.
    J'ai vraiment besoin de vos conseils et de votre aide si je veux y arriver. Par ou commencer, comment m'y prendre.

    Merci bcp,
    Vincent

    ------------------------FICHER XML PLAT----------------------------
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
      <ERRORCODE>0</ERRORCODE> 
      <DATABASE>Base_TIM_V03.8.fp7</DATABASE> 
      <LAYOUT /> 
    - <ROW MODID="9" RECORDID="241">
      <ID_Tache>ENR41</ID_Tache> 
      <Code_Parent /> 
      <Type_Tache>TS</Type_Tache> 
      <Arbo>00</Arbo> 
      <Nom_Tache>IT_ClassManage</Nom_Tache> 
      <CalculAcces /> 
      <CalculImpact /> 
      <CalculEntree /> 
      <CalculSortie /> 
      <CalculAction01 /> 
      <CalculAction02 /> 
      <CalculAction03 /> 
      <CalculAction04 /> 
      </ROW>
    - <ROW MODID="36" RECORDID="201">
      <ID_Tache>ENR01</ID_Tache> 
      <Code_Parent>ENR41</Code_Parent> 
      <Type_Tache>TS</Type_Tache> 
      <Arbo>01</Arbo> 
      <Nom_Tache>Classe de D</Nom_Tache> 
      <CalculAcces /> 
      <CalculImpact /> 
      <CalculEntree /> 
      <CalculSortie /> 
      <CalculAction01 /> 
      <CalculAction02 /> 
      <CalculAction03 /> 
      <CalculAction04 /> 
      </ROW>
    - <ROW MODID="36" RECORDID="202">
      <ID_Tache>ENR02</ID_Tache> 
      <Code_Parent>ENR01</Code_Parent> 
      <Type_Tache>TS</Type_Tache> 
      <Arbo>01.1</Arbo> 
      <Nom_Tache>Créer une classe de D</Nom_Tache> 
      <CalculAcces>S02 ^ S03.</CalculAcces> 
      <CalculImpact>S.</CalculImpact> 
      <CalculEntree>S.</CalculEntree> 
      <CalculSortie>S06 [statut : créé ; O03 [classe de D]].</CalculSortie> 
      <CalculAction01 /> 
      <CalculAction02 /> 
      <CalculAction03 /> 
      <CalculAction04 /> 
      </ROW>
    - <ROW MODID="35" RECORDID="203">
      <ID_Tache>ENR03</ID_Tache> 
      <Code_Parent>ENR02</Code_Parent> 
      <Type_Tache>TS</Type_Tache> 
      <Arbo>01.1.1</Arbo> 
      <Nom_Tache>Afficher la boite de dialogue "Propriété - Classe de D"</Nom_Tache> 
      <CalculAcces>S.</CalculAcces> 
      <CalculImpact>S07 [statut : ouvert ; O04 [BD "Propriétés - Classe de D"]].</CalculImpact> 
      <CalculEntree>S.</CalculEntree> 
      <CalculSortie>S08 [statut : affiché ; O04 [BD "Propriétés - Classe de D"]].</CalculSortie> 
      <CalculAction01 /> 
      <CalculAction02 /> 
      <CalculAction03 /> 
      <CalculAction04 /> 
      </ROW>
    - <ROW MODID="35" RECORDID="205">
      <ID_Tache>ENR05</ID_Tache> 
      <Code_Parent>ENR03</Code_Parent> 
      <Type_Tache>TA</Type_Tache> 
      <Arbo>01.1.1.1</Arbo> 
      <Nom_Tache>Afficher par raccourci</Nom_Tache> 
      <CalculAcces>S.</CalculAcces> 
      <CalculImpact>S.</CalculImpact> 
      <CalculEntree>S.</CalculEntree> 
      <CalculSortie>S.</CalculSortie> 
      <CalculAction01>A02 [cliquer sur ; O05 [bouton "Nouveau"]].</CalculAction01> 
      <CalculAction02 /> 
      <CalculAction03 /> 
      <CalculAction04 />
    </FMPDSORESULT>
      </ROW>
    ------------------------FICHER XML ARBORESCENT----------------------------

    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
    <tim>
      <Tache_struct ID="ENR41" Type="Structuree">
        <Nom>T00 [IT_ClassManage].</Nom> 
        <Tache_struct ID="ENR01" Type="Structuree">
          <Nom>T01 [Classe de D].</Nom> 
            <Tache_struct ID="ENR02" Type="Structuree">
              <Nom>T01.1 [Créer une classe de D].</Nom> 
              <Perimetre>
                <Acces>S02 ^ S03.</Acces> 
                <Impact>S.</Impact> 
                <Entree>S.</Entree> 
                <Sortie>S06 [statut : créé ; O03 [classe de D]].</Sortie> 
              </Perimetre>
              <Tache_struct ID="ENR03" Type="Structuree">
                <Nom>T01.1.1 [Afficher la boite de dialogue "Propriété - Classe de D"].</Nom> 
                <Perimetre>
                  <Acces>S.</Acces> 
                  <Impact>S07 [statut : ouvert ; O04 [BD "Propriétés - Classe de D"]].</Impact> 
                  <Entree>S.</Entree> 
                  <Sortie>S08 [statut : affiché ; O04 [BD "Propriétés - Classe de D"]].</Sortie> 
                </Perimetre>
                <Tache_atomique ID="ENR05" Type="Atomique">
                  <Nom>T01.1.1.1 [Afficher par raccourci].</Nom> 
                  <Perimetre>
                    <Acces>S.</Acces> 
                    <Impact>S.</Impact> 
                    <Entree>S.</Entree> 
                    <Sortie>S.</Sortie> 
                    </Perimetre>
                    <Procedure>
                      <Action>A02 [cliquer sur ; O05 [bouton "Nouveau"]].</Action> 
                    </Procedure>
                </Tache_atomique>
              </Tache_struct>
            </Tache_struct>
        </Tache_struct>
      </Tache_struct>
    </tim>

  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 Re: xml plat à xml arborescent
    Citation Envoyé par enigma
    Mon objectif serait de créer une XSL qui me permettent de passer d'un xml plat à un xml arborescent. L'unique ressource trouvait, c'est ce post :
    http://www.developpez.net/forums/vie...354931#1354931
    Mais je n'y comprends rien, pourtant j'ai lutté.
    Dommage, c'est celle vers laquelle je voulais te renvoyer.
    Ton cas me paraît cependant légèrement plus compliqué que celui exposé dans le défi auquel tu fais référence.

    La première chose à faire, est de rédiger en bon français les règles de production de ton XML de sortie, afin qu'on comprenne bien quels sont les éléments à traiter et sous quelles conditions.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Merci.
    Qu'entends-tu par «règles de production» ?
    Un texte expliquant les attentes de mon fichier xml de sortie ? Qui met en évidence ce que j'aimerais faire ce fichier xml ?

    Vincent

  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
    Non, les règles de production sont les règles qui décrivent le processus permettant de passer de ta source XML à ton format de sortie souhaité. Mieux elles sont rédigées, plus il sera facile de les traduire en langage XSLT.

    Par exemple, une règle possible serait que les balises <ERRORCODE>, <DATABASE> et <LAYOUT> sont ignorées, ou encore que l'imbrication d'une tâche dans une autre se fait selon qu'elles sont liées par une relation parent-enfant, matérialisée par une égalité entre <ID_TACHE> de la tâche parent et <Code_Parent> de la tâche fille. Ce genre de truc, quoi.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    - Remplacé <FMPDSORESULT> par <tim>
    - <ERRORCODE> <DATABASE> <LAYOUT />
    - Remplacé <ROW> et ses attributs soit par <Tache_Struct> soit par <Tache_atomique> selon si le <Type_Tache> est respectivement "TS" ou "TA".
    - <ID_Tache> devient ID, attribut de <Tache_Struct> ou de <Tache_atomique>.
    - <Type_Tache>TS</Type_Tache> devient Type="Structuree", attribut de <Tache_Struct>.
    - <Type_Tache>TA</Type_Tache> devient Type="Atomique", attribut de <Tache_atomique>.
    - Le contenu de <Arbo> et de <Nom_Tache> est réuni dans le balise <Nom>
    - Supprimer les balises vides <Calcul.../>

    - Encadré <CalculAccess>, <CalculImpact>, <CalculEntree>, <CalculSortie> dans <Perimetre>
    - Remplacé <CalculAccess> par <Acces>
    - Remplacé <CalculImpact> par <Impact>
    - Remplacé <CalculEntree> par <Entree>
    - Remplacé <CalculSortie> par <Sortie>


    - Encadré <CalculAction01>, <CalculAction02>, <CalculAction03>, <CalculAction04> dans
    <Procedure>
    - Remplacé <CalculAction01> par <Action>
    - Remplacé <CalculAction02> par <Action>
    - Remplacé <CalculAction03> par <Action>
    - Remplacé <CalculAction04> par <Action>

    ----------------------------
    L'arborescence se construit avec la tache parent (<Code_Parent> et l'<Arbo>).
    Une tache atomique est systématiquement à la fin (en profondeur) et précédée d'une tache

    structurée.


    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
    <tim> 
      <Tache_struct ID="ID_Tache" Type="Type_Tache"> 
        <Nom>Arbo + Nom_Tache</Nom> 
        <Tache_struct ID="ID_Tache" Type="Type_Tache"> 
          <Nom>Arbo + Nom_Tache</Nom> 
            <Tache_struct ID="ID_Tache" Type="Type_Tache">
              <Nom>Arbo + Nom_Tache</Nom>  
              <Perimetre> 
                <Acces>CalculAccess</Acces> 
                <Impact>CalculImpact</Impact> 
                <Entree>CalculEntree</Entree> 
                <Sortie>CalculSortie.</Sortie> 
              </Perimetre> 
              <Tache_struct ID="ID_Tache" Type="Type_Tache">
                <Nom>Arbo + Nom_Tache</Nom>  
                <Perimetre> 
                  <Acces>CalculAccess</Acces> 
                  <Impact>CalculImpact</Impact>
                  <Entree>CalculEntree</Entree> 
                  <Sortie>CalculSortie</Sortie> 
                </Perimetre> 
                <Tache_atomique ID="ID_Tache" Type="Type_Tache">
                  <Nom>Arbo + Nom_Tache</Nom> 
                  <Perimetre> 
                    <Acces>CalculAccess</Acces> 
                    <Impact>CalculImpact</Impact> 
                    <Entree>CalculEntree</Entree> 
                    <Sortie>CalculSortie</Sortie> 
                    </Perimetre> 
                    <Procedure> 
                      <Action>CalculAction01</Action> 
                    </Procedure> 
                </Tache_atomique> 
              </Tache_struct> 
            </Tache_struct> 
        </Tache_struct> 
      </Tache_struct> 
    </tim>
    A-ton besoin d'autres détails ?

    Merci beaucoup de votre aide.
    Vincent

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    petite relance ...

    Merci de votre aide

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    ... personne ne pourrait m'aiguiller ?

    merci

  8. #8
    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
    As-tu au moins commencé à écrire quelque chose ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Non, je n'ai rien écrit. J'attends d'avoir des retours, voir si c'est faisaible ou plutôt si c'est dans mes capacités avant de m'y jeter.
    J'ai bien écrit les règles comme tu me l'avais demandé. Maintenant, j'aimerais être, si possible, guider, savoir par quoi commencer.

    Merci de votre aide.
    Vincent

  10. #10
    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
    C'est tout à fait faisable, et le principe à mettre en oeuvre est celui décrit dans le post que tu cites au début de ce topic. A partir du moment où tu auras compris l'algorithme utilisé, tu n'auras aucune difficulté pour écrire ta feuille de style.

    Donc, essaie d'abord de comprendre son fonctionnement. Si quelque chose te paraît obscur, pose-nous la question, et nous y répondrons avec plaisir. Mais ne t'attends pas à ce que nous écrivions la feuille de style pour toi...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Algo du ce topic ... je m'y suis penché et je n'ai jamais compris ! Je suis débutant et déjà je serais content si j'arrive à bien modifier (ajouter, supprimer, renommer) les noeuds. Le côté arborescent, c'est sur que non !
    Enfin, c'est pas grave, ce n'est pas d'une importante capitale non plus.

    Merci

  12. #12
    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 enigma
    Algo du ce topic ... je m'y suis penché et je n'ai jamais compris ! Je suis débutant et déjà je serais content si j'arrive à bien modifier (ajouter, supprimer, renommer) les noeuds. Le côté arborescent, c'est sur que non !
    Il ne faut pas partir vaincu...

    C'est vrai, XSLT n'est pas du tout évident au départ (j'en ai bavé comme tout le monde avant d'arriver à en assimiler totalement le concept), mais franchement c'est à la portée de n'importe quel informaticien à partir du moment où il s'en donne la peine. Pour t'aider à progresser, le forum est à ta disposition, mais l'impulsion doit venir de toi.

  13. #13
    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
    Allez, je te mets le pied à l'étrier :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpdsoresult"
    exclude-result-prefixes="fmp">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="fmp:FMPDSORESULT">
    		<tim>
    			<xsl:apply-templates select="fmp:ROW[fmp:Code_Parent = '']"/>
    		</tim>
    	</xsl:template>
     
    	<xsl:template match="fmp:ROW">
    		<xsl:variable name="typeTache">
    			<xsl:choose>
    				<xsl:when test="fmp:Type_Tache = 'TS'">Tache_struct</xsl:when>
    				<xsl:otherwise>Tache_atomique</xsl:otherwise>
    			</xsl:choose>
    		</xsl:variable>
    		<xsl:element name="{$typeTache}">
    			<xsl:attribute name="Type">
    				<xsl:choose>
    					<xsl:when test="fmp:Type_Tache = 'TS'">Structurée</xsl:when>
    					<xsl:otherwise>Atomique</xsl:otherwise>
    				</xsl:choose>
    			</xsl:attribute>
    			<Nom><xsl:value-of select="concat('T', fmp:Arbo, ' [', fmp:Nom_Tache, ']')"/></Nom>
    			<!-- Placer les autres traitements ici -->
    			<xsl:apply-templates select="following-sibling::fmp:ROW[fmp:Code_Parent = current()/fmp:ID_Tache]"/>
    		</xsl:element>
    	</xsl:template>
     
    </xsl:stylesheet>
    Ce code te donne l'arborescence des tâches, avec leur nom. Tu n'as plus qu'à ajouter les traitements manquants.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    wow ... je vais étudier ça de suite, merci beaucoup.
    a bientôt !

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    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
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpdsoresult" 
    exclude-result-prefixes="fmp"> 
       <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
     
       <xsl:template match="fmp:FMPDSORESULT"> 
          <tim> 
             <xsl:apply-templates select="fmp:ROW[fmp:Code_Parent = '']"/> 
          </tim> 
       </xsl:template> 
     
       <xsl:template match="fmp:ROW"> 
          <xsl:variable name="typeTache"> 
             <xsl:choose> 
                <xsl:when test="fmp:Type_Tache = 'TS'">Tache_struct</xsl:when> 
                <xsl:otherwise>Tache_atomique</xsl:otherwise> 
             </xsl:choose> 
          </xsl:variable> 
          <xsl:element name="{$typeTache}"> 
             <xsl:attribute name="ID"> 
                <xsl:value-of select="ID_Tache"/> 
             </xsl:attribute>
             <xsl:attribute name="Type"> 
                <xsl:choose> 
                   <xsl:when test="fmp:Type_Tache = 'TS'">Structuree</xsl:when> 
                   <xsl:otherwise>Atomique</xsl:otherwise> 
                </xsl:choose> 
             </xsl:attribute> 
             <Nom><xsl:value-of select="concat('T', fmp:Arbo, ' [', fmp:Nom_Tache, ']')"/></Nom> 
             <!-- Placer les autres traitements ici --> 
     
    <xsl:element name="Perimetre"> 
    <xsl:element name="Acces"><xsl:value-of select="CalculAccess"/></xsl:element>
    <xsl:element name="Impact"><xsl:value-of select="CalculImpact"/></xsl:element>
    <xsl:element name="Entree"><xsl:value-of select="CalculEntree"/></xsl:element>
    <xsl:element name="Sortie"><xsl:value-of select="CalculSortie"/></xsl:element>
    </xsl:element>
     
    <xsl:element name="Procedure"> 
    <xsl:element name="Action"><xsl:value-of select="CalculAction01"/></xsl:element>
    <xsl:element name="Action"><xsl:value-of select="CalculAction02"/></xsl:element>
    <xsl:element name="Action"><xsl:value-of select="CalculAction03"/></xsl:element>
    <xsl:element name="Action"><xsl:value-of select="CalculAction04"/></xsl:element>
    </xsl:element>
     
             <xsl:apply-templates select="following-sibling::fmp:ROW[fmp:Code_Parent = current()/fmp:ID_Tache]"/> 
          </xsl:element> 
       </xsl:template> 
     
    </xsl:stylesheet>
    J'ai rajouté la suite ... mais ça me parait bien simple pour être juste. Que dois-je faire de plus ?
    J'ai rajouté un l'attribut "ID" dans la balise Tache_Struct" et je me suis occupé de la balise <Perimetre> et <Procedure>.
    Je ne comprends pas pourquoi on a parfois fmp:Type_Tache ou fmp:ROW ? Pourrait-on me l'expliquer ?

    Merci (beaucoup Grand Father)

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    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="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpdsoresult" 
    exclude-result-prefixes="fmp"> 
       <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
     
       <xsl:template match="fmp:FMPDSORESULT"> 
          <tim> 
             <xsl:apply-templates select="fmp:ROW[fmp:Code_Parent = '']"/> 
          </tim> 
       </xsl:template> 
     
       <xsl:template match="fmp:ROW"> 
          <xsl:variable name="typeTache"> 
             <xsl:choose> 
                <xsl:when test="fmp:Type_Tache = 'TS'">Tache_struct</xsl:when> 
                <xsl:otherwise>Tache_atomique</xsl:otherwise> 
             </xsl:choose> 
          </xsl:variable> 
          <xsl:element name="{$typeTache}"> 
             <xsl:attribute name="ID"> 
                <xsl:value-of select="ID_Tache"/> 
             </xsl:attribute> 
             <xsl:attribute name="Type"> 
                <xsl:choose> 
                   <xsl:when test="fmp:Type_Tache = 'TS'">Structuree</xsl:when> 
                   <xsl:otherwise>Atomique</xsl:otherwise> 
                </xsl:choose> 
             </xsl:attribute> 
             <Nom><xsl:value-of select="concat('T', fmp:Arbo, ' [', fmp:Nom_Tache, ']')"/></Nom> 
     
     
    <xsl:choose>
      <xsl:when test="fmp:Type_Tache = 'TS'">
        <Perimetre>
        <Acces><xsl:value-of select="CalculAccess"/></Acces>
        <Impact><xsl:value-of select="CalculImpact"/></Impact>
        <Entree><xsl:value-of select="CalculEntree"/></Entree>
        <Sortie><xsl:value-of select="CalculSortie"/></Sortie>
        </Perimetre>
      </xsl:when> 
     
      <xsl:otherwise>
        <Procedure>
        <Action><xsl:value-of select="CalculAction01"/></Action>
        <Action><xsl:value-of select="CalculAction02"/></Action>
        <Action><xsl:value-of select="CalculAction03"/></Action>
        <Action><xsl:value-of select="CalculAction04"/></Action>
        </Procedure>
      </xsl:otherwise>
    </xsl:choose> 
     
             <xsl:apply-templates select="following-sibling::fmp:ROW[fmp:Code_Parent = current()/fmp:ID_Tache]"/> 
          </xsl:element> 
       </xsl:template> 
     
    </xsl:stylesheet>
    J'ai modifié un peu le script, mais bon, sans résultat.

  17. #17
    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
    Toutes les balises de ta source XML appartiennent à l'espace de nom "http://www.filemaker.com/fmpdsoresult". Pour se rendre compte de cela, il suffit de lire la première ligne de ta source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
    L'espace de nom par défaut est valable pour tous les éléments fils de l'élément où il est déclaré, ainsi que pour lui-même.

    Dans la feuille de style XSL, le préfixe fmp a donc été ajouté pour pointer vers le même espace de nom. Il faut l'utiliser dans chaque expression XPath qui doit sélectionner des éléments appartenant à cet espace de noms, sinon elle échoue (les éléments ne sont pas sélectionnés).

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    D'accord, je l'ignorais, je pensais que les balises pouvait être considérées comme des balises indépendantes.
    Sinon, que penses-tu du code ? ... une horreur n'est-ce pas ?
    Que dois-je reprendre ? Car pour le moment, mon fichier resultat donne strictement rien

    Merci bcp de ton aide

  19. #19
    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
    Voici le code 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
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpdsoresult" 
    exclude-result-prefixes="fmp"> 
       <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
     
       <xsl:template match="fmp:FMPDSORESULT"> 
          <tim> 
             <xsl:apply-templates select="fmp:ROW[fmp:Code_Parent = '']"/> 
          </tim> 
       </xsl:template> 
     
       <xsl:template match="fmp:ROW"> 
          <xsl:variable name="typeTache"> 
             <xsl:choose> 
                <xsl:when test="fmp:Type_Tache = 'TS'">Tache_struct</xsl:when> 
                <xsl:otherwise>Tache_atomique</xsl:otherwise> 
             </xsl:choose> 
          </xsl:variable> 
          <xsl:element name="{$typeTache}"> 
             <xsl:attribute name="ID"> 
                <xsl:value-of select="fmp:ID_Tache"/> 
             </xsl:attribute> 
             <xsl:attribute name="Type"> 
                <xsl:choose> 
                   <xsl:when test="fmp:Type_Tache = 'TS'">Structuree</xsl:when> 
                   <xsl:otherwise>Atomique</xsl:otherwise> 
                </xsl:choose> 
             </xsl:attribute> 
             <Nom><xsl:value-of select="concat('T', fmp:Arbo, ' [', fmp:Nom_Tache, ']')"/></Nom> 
    		<xsl:if test="normalize-space(fmp:CalculAccess) != '' or normalize-space(fmp:CalculImpact) != '' or normalize-space(fmp:CalculEntree) != '' or normalize-space(fmp:CalculSortie) != ''">
    			<Perimetre> 
    				<Acces><xsl:value-of select="fmp:CalculAcces"/></Acces> 
    				<Impact><xsl:value-of select="fmp:CalculImpact"/></Impact> 
    				<Entree><xsl:value-of select="fmp:CalculEntree"/></Entree> 
    				<Sortie><xsl:value-of select="fmp:CalculSortie"/></Sortie> 
    			</Perimetre> 
    		</xsl:if>
    		<xsl:if test="normalize-space(fmp:CalculAction01) != '' or normalize-space(fmp:CalculAction02) != '' or normalize-space(fmp:CalculAction03) != '' or normalize-space(fmp:CalculAction04) != ''">
    			<Procedure>
    				<xsl:apply-templates select="fmp:CalculAction01[normalize-space(.) != '']|fmp:CalculAction02[normalize-space(.) != '']|fmp:CalculAction03[normalize-space(.) != '']|fmp:CalculAction04[normalize-space(.) != '']"/>
    			</Procedure>
    		</xsl:if>
             <xsl:apply-templates select="following-sibling::fmp:ROW[fmp:Code_Parent = current()/fmp:ID_Tache]"/> 
          </xsl:element> 
       </xsl:template> 
     
    	<xsl:template match="fmp:CalculAction01|fmp:CalculAction02|fmp:CalculAction03|fmp:CalculAction04">
    		<Action><xsl:value-of select="."/></Action>
    	</xsl:template>
     
    </xsl:stylesheet>
    En fait, malgré ce que je t'ai dis au départ, il n'est pas nécessaire d'utiliser la méthode sophistiquée que Erwy et moi avons trouvée pour résoudre ton problème, pour la bonne et simple raison que ta source XML n'est pas complètement plate (je ne l'ai pas vu tout de suite, ton fichier XML n'étant pas bien indenté).

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Merci bcp GrandFather, ça fonctionne très bien ! J'ai juste besoin de quelques explications.
    J'ai compris l'utilisation de la variable, la première utilisation de normalize-space et le reste sauf le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="fmp:CalculAction01[normalize-space(.) != '']
    Qu'est-ce que cela signifie ? Que l'on sélectionne tous les noeuds courants différents de 0 caractères en supprimant les espaces inutiles ?

    Pourrais-tu aussi m'expliquer ce que fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="following-sibling::fmp:ROW[fmp:Code_Parent = current()/fmp:ID_Tache]"/>
    Merci.
    Vincent

Discussions similaires

  1. [XSLT] Regroupement et imbrication hierarchique d'un fichier Xml Plat
    Par Yann F-FLYC dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 22/10/2014, 17h32
  2. [XSLT 2] Plat -> XML : Content is not allowed in prolog.
    Par davedenice dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/05/2009, 15h40
  3. [XML][XSLT] transformer le xml en binaire via une xslt
    Par chama dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/07/2005, 11h42
  4. [XSLT] transformation XHTML->XML
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 23/05/2005, 13h15
  5. [XSLT] XML vers XML
    Par ren0 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/10/2004, 12h54

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