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 :

[XSL] Récupération des attributs parents


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut [XSL] Récupération des attributs parents
    Bonjour tout le monde,

    à chaque jour un problème différent lol. Je vais essayer d'expliquer mon pb.
    Comme à mon habitude je dois extraire des données d'un fichier XML et les mettre dans un fichier CSV.
    J'ai un fichier XML qui ressemble a ça :
    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
     
     
    <Noeud1>
           <Noeud2 name="Variable1">
                 <Elements>
                       <Element name="parentparentname" >
                             < Eléments >
                                   < Élément name="parentname1">
                                        <Modules>
                                              <Modules  name= "test1" >
                                                  .
                                                  .
                                              <Modules  name= "testN" >
                                         </Modules>
                                    </Élément>
     
                                   < Élément name="parentname2">
                                        <Modules>
                                              <Modules  name= "test1">
                                                  .
                                                  .
                                              <Modules  name= "testN">
                                         </Modules>
                                   </Élément>
                            </Éléments>
                       </Élément>
                 </Éléments>
           </Noeud2>
    </Noeud1>
    J'espere que mon XML est compréhensible.
    Ce que je veux faire, c'est un fichier CSV de cette forme

    Test1,Parentname1,ParentParentname

    TestN,Parentname1,ParentParentname

    Test1,Parentname2,ParentParentname

    TestN,Parentname2,ParentParentname

    et ainsi de suite

    Ce que je pensais faire :

    1° : Apply template sur le noeud modules (ça me permet de récupérer tous les modules)

    2 ° : récupérer l'attribut du parent juste au dessus (parentname)

    3° :récupérer l'attribut du parent encore au dessus (parentparentname)

    Mon problème est que je ne sais pas récupérer les attributs parents quand je fais un apply template sur le noeuds modules. Avez vous un moyen de faire ça ? ou des conseil pour réaliser ce que je veux

    J'espère avoir bien expliquer mon problème

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour M_saun,

    si ton noeud contexte est <Modules/>
    alors l'expression Xpath permettant d'obtenir l'attribut name de l'élément parent Élément est "../Élément/@name".

    Pour d'autres éléments parents, tu peux appliquer le même principe.

    Remarque : tu peux simplifier ton code XML, en remplacant les types Noeud1 et Noeud2 par le type Noeud. Il suffit d'interpréter le nombre (1 ou 2) comme
    le niveau d'un élément dans l'arbre XML.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Est-ce que les noeuds type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Modules  name= "blabla" >
    seront toujours à la même profondeur (le même nombre de parents)?

    PS : pas le droit aux accent dans le nom des élements et attributs.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Désolé j'ai une erreur sur mon fichier, (corrigé en Gras ci dessous)
    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
    <Noeud1>
           <Noeud2 name="Variable1">
                 <Elements>
                       <Element name="parentparentname" >
                             < Eléments >
                                   < Élément name="parentname1">
                                        <Modules>
                                              <Module  name= "test1" >
                                                  .
                                                  .
                                              <Module  name= "testN" >
                                         </Modules>
                                    </Élément>
     
                                   < Élément name="parentname2">
                                        <Modules>
                                              <Module  name= "test1">
                                                  .
                                                  .
                                              <Module  name= "testN">
                                         </Modules>
                                   </Élément>
                            </Éléments>
                       </Élément>
                 </Éléments>
           </Noeud2>
    </Noeud1>
    si mon noeud contexte est <Module/>, pour récupérer :
    Parentname =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="../Modules/Élément/@name"/>
    ParentParentname =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="../Modules/Élément/Éléments/Élément/@name"/>
    Est ce bon ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Est-ce que les noeuds type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Modules  name= "blabla" >
    seront toujours à la même profondeur (le même nombre de parents)?

    PS : pas le droit aux accent dans le nom des élements et attributs.
    Oui les noeuds type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Module  name= "blabla" >
    seront toujours à la même profondeur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut [XSL] Récupération des attributs parents
    J'ai chercher partout sur internet, et je n'ai pas trouver le moyen de récupérer mes valeurs.

    ParentName

    ParentParentName

    J'ai peut être tout faux dans ma démarche...

    Le problème est que si je fais un apply-template sur le premier noeud Elements.
    Mon Fichier csv ne contient pas tous les noms de modules.

    Et si j'applique mon template au niveau des modules j'ai tous les noms mais je n'arrive pas a avoir les élements.

    Ah la la la je galère vraiment là lol

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Personne a une idée ?

    Je suis pas un pro en XSL ni XPATH, j'essaie de me débrouiller mais là je suis bloqué.

    ça se trouve, je n'ai pas pensé a un truc évident pour vous.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Et un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="Module">
    <xsl:value-of select="@name"/>,<xsl:value-of select="../../*/@name"/>,<xsl:value-of select="../../../../*/@name"/>
    </xsl:template>

  9. #9
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    J'ai chercher partout sur internet, et je n'ai pas trouver le moyen de récupérer mes valeurs.
    Oui, je serais étonné qu'il n'existe pas quelque chose à ce sujet dans un tutoriel du site !
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    Oui, je serais étonné qu'il n'existe pas quelque chose à ce sujet dans un tutoriel du site !
    Bah alors j'ai pas assez cherché , bon maintenant je sais voir les pères les mères, les frères, les soeurs, et les grand parents aussi lol.

    j'ai un autre soucis, (et oui encore lol)...
    Je comprend pas dans mon csv il ne me sort pas tout les element,

    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
    <Noeud1>
           <Noeud2 name="Variable1">
                 <Elements>
                       <Element name="parentparentname" >
                             < Eléments >
                                   < Élément name="parentname1">
                                        <Modules>
                                              <Module  name= "test1" >
                                                  .
                                                  .
                                              <Module  name= "testN" >
                                         </Modules>
                                    </Élément>
     
                               < Élément name="parentname2">
                                        <Modules>
                                              <Module  name= "test1">
                                                  .
                                                  .
                                              <Module  name= "testN">
                                         </Modules>
                                   </Élément>
                            </Éléments>
                       </Élément>
                 </Éléments>
           </Noeud2>
    </Noeud1>

    j'ai les module de parentname 1, mais pas ceux de parentname2(en gras)
    Pour infos : y'en a beaucoup plus mon fichier XML fais 7mo.

    ça doit venir de mon apply template...

    qui ressemble à ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="noeud1/noeud2/Elements/Element/Elements/Element/Modules/Module"/>
    Moi ce que je comprend c'est qu'il applique le temple sur tout les element module du fichier XML... j'ai mal compris ?


  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Fait juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="//module"/>
    Ca t'éviteras de t'emmêler les pinceaux avec les accents.

    Et le template que je t'ai proposé, il marche?

  12. #12
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bah alors j'ai pas assez cherché
    J'y suis pour rien ! Il existe de nombreux sites traitant le sujet.

    Je comprend pas dans mon csv il ne me sort pas tout les elementSSSS,
    Voiçi ce que Morbo t'as signalé :
    PS : pas le droit aux accent dans le nom des élements et attributs.
    Mais tu n'en a pas tenu compte !

    Pour infos : y'en a beaucoup plus mon fichier XML fais 7mo.
    Pour le moment, ce n'est pas un soucis.

    Le XML est sensible à la casse. C-à-d que les minuscules et les majuscules sont différenciées. Donc, ton expression XPath :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noeud1/noeud2/Elements/Element/Elements/Element/Modules/Module
    ne correspond à rien !

    Moi ce que je comprend c'est qu'il applique le temple sur tout les element module du fichier XML...
    Tu as bien compris.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    T'as oublié le smiley que j'ai mi après
    bah alors j'ai pas assez cherché
    Je ne te faisais pas de remarque, je m'en faisais une à moi après je peux comprendre que ça te saoule . Et je m'en excuse.

    Pour ce qui est des accents, mon XML n'en a pas. C’est un fichier qui est généré par un générateur de code. Du coup je ne peux pas trop y toucher.
    J'ai essayé de faire simple, et j'ai mis des accents sans trop y faire attention. Encore une fois désolé.

    Je vais vous filer un morceau du fichier XML généré :


    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
     
    <?xml version="1.0" encoding="Windows-1252"?>
    <ProjectExchangeFile>
      <fileHeader company="Schneider Electric SAS" product="Unity Application Generator" productVersion="V3.2  Version 3.2.261.13 - Large Version" schemaVersion="1.0" dateTime="07/15/2010 08:39:30  02:00:00" />
      <contentHeader projectFile="C:\CustomerUAG\Germany_ZKW-Lage\ZKW_Lage\ZKW_Lage.osp" />
      <physicalModel>
        <physicalElements>
          <physicalElement name="ZKW" levelName="Area" description="Zentralklärwerk Lage">
            <physicalElements>
              <physicalElement name="SteuerungZulauf" levelName="Process Cell" description="Steuerung Zulauf" plc="SPSZUL" controlDomain="Zulauf" section="SteuerungZulauf">
                <physicalElements>
                  <physicalElement name="Rechen" levelName="Unit" description="Rechenanlage" variableNamePrefix="Rechen_" plc="SPSZUL" controlDomain="Zulauf" section="Rechen_ges" picture="Rechen_Übersicht">
                    <controlModules>
                      <controlModule name="P20GA001" fullName="Rechen_P20GA001" type="MELD_LPS1" library="CItect70_Astra" description="Rechengesamtanlage" plc="SPSZUL" variableNamePrefix="Rechen_P20GA001_" separatorLine="false">
                        </controlModule>
                      <controlModule name="P96GP051" fullName="Rechen_P96GP051" type="MELD_LPM1" library="CItect70_Astra" description="Gebäudeinstallation Rechen Notlichtanlage" plc="SPSZUL" variableNamePrefix="Rechen_P96GP051_" separatorLine="false">
                      </controlModule>
                      <controlModule name="P96GS072" fullName="Rechen_P96GS072" type="MELD_CME2" library="CItect70_Astra" description="Gebäudeinstallation Rechen Notlichtanlage, Motorschutzschalter" plc="SPSZUL" variableNamePrefix="Rechen_P96GS072_" separatorLine="false">
                       </controlModule>
                    </controlModules>
                  </physicalElement>
                  <physicalElement name="Rech1" levelName="Unit" description="Rechen 1" variableNamePrefix="Rech1_" plc="SPSZUL" controlDomain="Zulauf" section="Rechen_1" picture="Rechen_1">
                    <controlModules>
                      <controlModule name="P20AA001" fullName="Rech1_P20AA001" type="MELD_CV4" library="CItect70_Astra" description="Rechen 1 Sohleventil 12Y1" plc="SPSZUL" variableNamePrefix="Rech1_P20AA001_" separatorLine="false" hmiSymbolType="VijeoCitect Genie" hmiSymbolName="uag_ventil_astra.vent01_m_h_o_a">
                       </controlModule>
                      <controlModule name="P20AM001" fullName="Rech1_P20AM001" type="MOT_LPM3" library="CItect70_Astra" description="Rechen 1" plc="SPSZUL" variableNamePrefix="Rech1_P20AM001_" separatorLine="false" hmiSymbolType="VijeoCitect Genie" hmiSymbolName="uag_motor_astra.mot01_o_a">
                       </controlModule>
                    </controlModules>
                  </physicalElement>
                  <physicalElement name="ZulaufPW" levelName="Unit" description="Zulauf Pumpwerk" variableNamePrefix="ZulaufPW_" plc="SPSZUL" controlDomain="Zulauf" section="ZulaufPW" picture="Zulaufpumpwerk">
                    <controlModules>
                      <controlModule name="P10AP001" fullName="ZulaufPW_P10AP001" type="MOT_LPP2" library="CItect70_Astra" description="Zulaufschnecke I" plc="SPSZUL" variableNamePrefix="ZulaufPW_P10AP001_" separatorLine="false">
                        </controlModule>
                      <controlModule name="P10AP002" fullName="ZulaufPW_P10AP002" type="MOT_LPP2" library="CItect70_Astra" description="Zulaufschnecke II" plc="SPSZUL" variableNamePrefix="ZulaufPW_P10AP002_" separatorLine="false">
                        </controlModule>
                      <controlModule name="P10AP003" fullName="ZulaufPW_P10AP003" type="MOT_LPP1" library="CItect70_Astra" description="Zulaufschnecke III" plc="SPSZUL" variableNamePrefix="ZulaufPW_P10AP003_" separatorLine="false">
                       </controlModule>
                    </controlModules>
                  </physicalElement>
                  <physicalElement name="ContRech" levelName="Unit" description="Containeranlage Rechen" variableNamePrefix="ContRech_" plc="SPSZUL" controlDomain="Zulauf" section="ContRech" picture="Containerversch_Rechen">
                    <controlModules>
                      <controlModule name="P20AB001" fullName="ContRech_P20AB001" type="MELD_CME2" library="CItect70_Astra" description="Rolltor 1" plc="SPSZUL" variableNamePrefix="ContRech_P20AB001_" separatorLine="false">
                       </controlModule>
                      <controlModule name="P20AB002" fullName="ContRech_P20AB002" type="MELD_CME2" library="CItect70_Astra" description="Rolltor 2" plc="SPSZUL" variableNamePrefix="ContRech_P20AB002_" separatorLine="false">
                       </controlModule>
                      <controlModule name="P20AM301" fullName="ContRech_P20AM301" type="MELD_LPM2" library="CItect70_Astra" description="Wagen 1" plc="SPSZUL" variableNamePrefix="ContRech_P20AM301_" separatorLine="false">
                      </controlModule>
                      <controlModule name="P20AM302" fullName="ContRech_P20AM302" type="MELD_LPM2" library="CItect70_Astra" description="Wagen 2" plc="SPSZUL" variableNamePrefix="ContRech_P20AM302_" separatorLine="false">
                      </controlModule>
                    </controlModules>
                  </physicalElement>
                </physicalElements>
              </physicalElement>
     
     
    		  <physicalElement name="SteuerungNSHV1" levelName="Process Cell" description="Steuerung NSHV1" plc="SPSNSHV1" controlDomain="NSHV1" section="SteuerungNSHV1">
    			<physicalElements>
    				<physicalElement name="Rechen" levelName="Unit" description="Rechenanlage" variableNamePrefix="Rechen_" plc="SPSZUL" controlDomain="Zulauf" section="Rechen_ges" picture="Rechen_Übersicht">
    					 <controlModules>
    					   <controlModule name="Server1" fullName="Server1" type="Station20" library="UAGBasis713140" description="Server1" plc="SPSNSHV1" variableNamePrefix="Server1_" separatorLine="false">
    				          </controlModule>
                                          </controlModules>
    				</physicalElement>
    			</physicalElements>
    		  </physicalElement>
    		</physicalElements>
    	  </physicalElement>
        </physicalElements>
      </physicalModel>
    </ProjectExchangeFile>
    Je l'ai beaucoup réduit (avec l'aide de la touche suppr), je suis passé de 32000 lignes à 69. J'ai gardé les lignes principales. Ça sera une meilleure base comme ça, je ne vous montre pas n'importe quoi lol.

    Ensuite j'ai fais mon fichier xsl :

    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="text" encoding="ISO-8859-1" />
     
     
    	<xsl:template match="/">
    		<xsl:text>controlModule.library,controleModule.plc,parent.name,parent.levelName,parent.controlDomain,parent.parent.name,parent.parent.levelName,parent.parent.controlDomain</xsl:text>
    		<xsl:text>
    </xsl:text>
    		<xsl:apply-templates select="//controlModule"/>		
    	</xsl:template>
     
    	<xsl:template match="controlModule">
    			<xsl:call-template name="writeImportLine">
    				<xsl:with-param name="name" select= "@name"/>
    				<xsl:with-param name="Library" select= "@library"/>
    				<xsl:with-param name="PLC" select= "@plc"/>			
     
    				<xsl:with-param name="ParentName" select="../../../*/@name"/>
    				<xsl:with-param name="ParentLevelName" select="../../../*/@levelName"/>
    				<xsl:with-param name="ParentControlDomain" select="../../../*/@controlDomain"/>
     
    				<xsl:with-param name="ParentParentName" select="../../../../../*/@name"/>
     
    				<xsl:with-param name="startNewLine" select="position() - 1" />
    			</xsl:call-template>
    	</xsl:template>
     
     
     
    	<xsl:template name="writeImportLine">
    		<xsl:param name="name"/>
    		<xsl:param name="Library"/>
    		<xsl:param name="PLC"/>
     
    		<xsl:param name="ParentName"/>
    		<xsl:param name="ParentLevelName"/>
    		<xsl:param name="ParentControlDomain"/>
     
    		<xsl:param name="ParentParentName"/>
    		<xsl:param name="startNewLine" />
     
    		<xsl:if test="$startNewLine > 0">
    			<!-- start new line -->
    			<xsl:text>
    </xsl:text>
    		</xsl:if>
     
    		<xsl:value-of select="$name"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$Library"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$PLC"/><xsl:text>,</xsl:text>
     
    		<xsl:value-of select="$ParentName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentLevelName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentControlDomain"/><xsl:text>,</xsl:text>
     
    		<xsl:value-of select="$ParentParentName"/><xsl:text>,</xsl:text>
     
    	</xsl:template>
     
    </xsl:stylesheet>
    Et le résultat que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    controlModule.library,controleModule.plc,parent.name,parent.levelName,parent.controlDomain,parent.parent.name,parent.parent.levelName,parent.parent.controlDomain
    P20GA001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P96GP051,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P96GS072,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AA001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AM001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P10AP001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P10AP002,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P10AP003,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AB001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AB002,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AM301,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AM302,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    Server1,Basis713140,SPSNSHV1,SteuerungZulauf,Process Cell,Zulauf,ZKW,
    En rouge ce n'est pas ce que j'aurai aimé avoir. J'ai le même parent partout

    En vert le résultat que j'aurai du avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    controlModule.library,controleModule.plc,parent.name,parent.levelName,parent.controlDomain,parent.parent.name,parent.parent.levelName,parent.parent.controlDomain
    P20GA001,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P96GP051,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P96GS072,CItect70_Astra,SPSZUL,Rechen,Unit,Zulauf,SteuerungZulauf,
    P20AA001,CItect70_Astra,SPSZUL,Rech1,Unit,Zulauf,SteuerungZulauf,
    P20AM001,CItect70_Astra,SPSZUL,Rech1,Unit,Zulauf,SteuerungZulauf,
    P10AP001,CItect70_Astra,SPSZUL,ZulaufPW,Unit,Zulauf,SteuerungZulauf,
    P10AP002,CItect70_Astra,SPSZUL,ZulaufPW,Unit,Zulauf,SteuerungZulauf,
    P10AP003,CItect70_Astra,SPSZUL,ZulaufPW,Unit,Zulauf,SteuerungZulauf,
    P20AB001,CItect70_Astra,SPSZUL,ContRech,Unit,Zulauf,SteuerungZulauf,
    P20AB002,CItect70_Astra,SPSZUL,ContRech,Unit,Zulauf,SteuerungZulauf,
    P20AM301,CItect70_Astra,SPSZUL,ContRech,Unit,Zulauf,SteuerungZulauf,
    P20AM302,CItect70_Astra,SPSZUL,ContRech,Unit,Zulauf,SteuerungZulauf,
    Server1,Basis713140,SPSNSHV1,Rechen,Unit,Zulauf,SteuerungNSHV1,

    Fait juste
    Code :
    <xsl:apply-templates select="//module"/>
    Ca t'éviteras de t'emmêler les pinceaux avec les accents.

    Et le template que je t'ai proposé, il marche?
    Je te remercie Morbo, je galérais vraiment à trouver lool.
    Je vais essayer ton Apply template.

    J'espère avoir bien détaillé.
    Voilà n'hésitez pas à me dire s'il manque quelque chose...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Bonjour tout le monde,

    J'ai trouvé une solution à mes problèmes. Ci dessous, le Style sheet que j'ai développé.

    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="text" encoding="ISO-8859-1" />
     
     
    	<xsl:template match="/">
    		<xsl:text>controlModule.library,controleModule.plc,parent.name,parent.levelName,parent.controlDomain,parent.parent.name,parent.parent.levelName,parent.parent.controlDomain</xsl:text>
    		<xsl:text>
    </xsl:text>
    		<xsl:apply-templates select="//controlModule"/>		
    	</xsl:template>
     
    	<xsl:template match="controlModule">
    			<xsl:call-template name="writeImportLine">
    				<xsl:with-param name="name" select= "@name"/>
    				<xsl:with-param name="Library" select= "@library"/>
    				<xsl:with-param name="PLC" select= "@plc"/>			
     
    				<xsl:with-param name="ParentName" select="../../@name"/>
    				<xsl:with-param name="ParentLevelName" select="../../@levelName"/>
    				<xsl:with-param name="ParentControlDomain" select="../../@controlDomain"/>
     
    				<xsl:with-param name="ParentParentName" select="../../../../@name"/>
    				<xsl:with-param name="ParentParentlevelName" select="../../../../@levelName"/>
    				<xsl:with-param name="ParentParentcontrolDomain" select="../../../../@controlDomain"/>
     
    				<xsl:with-param name="startNewLine" select="position() - 1" />
    			</xsl:call-template>
    	</xsl:template>
     
     
     
    	<xsl:template name="writeImportLine">
    		<xsl:param name="name"/>
    		<xsl:param name="Library"/>
    		<xsl:param name="PLC"/>
     
    		<xsl:param name="ParentName"/>
    		<xsl:param name="ParentLevelName"/>
    		<xsl:param name="ParentControlDomain"/>
     
    		<xsl:param name="ParentParentName"/>
    		<xsl:param name="ParentParentlevelName"/>
    		<xsl:param name="ParentParentcontrolDomain"/>
     
    		<xsl:param name="startNewLine" />
     
    		<xsl:if test="$startNewLine > 0">
    			<!-- start new line -->
    			<xsl:text>
    </xsl:text>
    		</xsl:if>
     
    		<xsl:value-of select="$name"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$Library"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$PLC"/><xsl:text>,</xsl:text>
     
    		<xsl:value-of select="$ParentName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentLevelName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentControlDomain"/><xsl:text>,</xsl:text>
     
    		<xsl:value-of select="$ParentParentName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentParentlevelName"/><xsl:text>,</xsl:text>
    		<xsl:value-of select="$ParentParentcontrolDomain"/><xsl:text>,</xsl:text>
    	</xsl:template>
     
    </xsl:stylesheet>


    Avant de clore ce sujet, j'aimerai avoir votre avis sur ma programmation. Y'a t'il des moyens d'optimiser ? Ou des erreurs de débutant ?


    Merci

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Heu, non pas grand chose, c'est bien comme ça.
    Si la hiérarchie avait été variable, il fallut faire du récursif, mais là pas besoin de se casser la tête.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Ok je te remercie .
    C'est donc résolu alors.
    Une dernière question c'est quoi du récursif ?

    merci

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Du récursif, c'est par exemple définir un template qui affiche sont père puis qui s'appelle sur son père qui affiche donc son grand-père, et ceux jusqu'à qu'il n'y ait plus de parent.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    et ça ressemblerai à quoi une fonction qui ferait ça ?

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    J'ai pas testé, mais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="/">
    	<path>
    		<xsl:apply-templates select="//controlModule" mode="showPath"/>		
    	</path>
    </xsl:template>
     
    <xsl:template match="*" mode="showPath">
    	<xsl:apply-templates select="parent::*" mode="showPath"/>/<xsl:value-of select="local-name()"/>
    </xsl:template>
     
    <xsl:template match="*">
    </xsl:template>
    Pour comprendre les "axes" en xpath, il y a ce schéma qu'est pas mal : http://infohost.nmt.edu/tcc/help/pub...axis-sect.html

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Je ne sais pas si je dois ouvrir un autre sujet, parce que c'est sensiblement la même chose.

    Si j'ai un XML comme ça :

    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
     
    <FBSource nameOfFBType="MOT_LDP1" version="0.12" dateTime="dt#2009-09-08-09:22:50">
    		<comment>MOT_LDP1 Motor Ein/Aus Dickschlamm Pumpe mit Freigabe mit 3 externen Störungen</comment>
    		<attribute name="TypeProtectionLevel" value="2#0000_0000"></attribute>
    		<outputParameters>
    			<variables name="BA_EIN" typeName="BOOL">
    				<comment>Ansteuerung EIN</comment>
    				<attribute name="PositionPin" value="1"></attribute>
    			</variables>
    			<variables name="M" typeName="WORD">
    				<comment>Statuswort an PLS</comment>
    				<attribute name="PositionPin" value="6"></attribute>
    			</variables>
    		</outputParameters>
    		<privateLocalVariables>
    			<variables name="FBI_0" typeName="TRIGGER"></variables>
    			<variables name="FBI_1" typeName="TRIGGER"></variables>
    			<variables name="FBI_16" typeName="RS"></variables>
    			<variables name="NEIN" typeName="BOOL"></variables>
    		</privateLocalVariables>
    		<FBProgram name="Betriebsart">
    			<FBDSource nbRows="24" nbColumns="36">
    				<networkFBD>
    					<FFBBlock instanceName="FBI_0" typeName="TRIGGER" additionnalPinNumber="0" enEnO="false" width="8" height="7">
    					</FFBBlock>
    					<FFBBlock instanceName="FBI_1" typeName="TRIGGER" additionnalPinNumber="0" enEnO="false" width="8" height="7">
    					</FFBBlock>
    					<FFBBlock instanceName="FBI_2" typeName="TRIGGER" additionnalPinNumber="0" enEnO="false" width="8" height="7">
    					</FFBBlock>
    					<FFBBlock instanceName="FBI_3" typeName="TRIGGER" additionnalPinNumber="0" enEnO="false" width="8" height="7">
    					</FFBBlock>
    					<FFBBlock instanceName=".1" typeName="OR" additionnalPinNumber="2" enEnO="false" width="7" height="8">
    					</FFBBlock>
    					<FFBBlock instanceName="FBI_4" typeName="TOF" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".2" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".3" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".4" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".6" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".7" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".8" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".9" typeName="OR" additionnalPinNumber="2" enEnO="false" width="7" height="8">
    					</FFBBlock>
    					<FFBBlock instanceName=".5" typeName="OR" additionnalPinNumber="4" enEnO="false" width="7" height="10">
    					</FFBBlock>
    					<FFBBlock instanceName=".10" typeName="AND" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".11" typeName="OR" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName="FBI_5" typeName="RS" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    					<FFBBlock instanceName=".12" typeName="OR" additionnalPinNumber="0" enEnO="false" width="7" height="6">
    					</FFBBlock>
    				</networkFBD>
    			</FBDSource>
    		</FBProgram>
    </FBSource>
    Si mon noeud courant est FFBBlock, et que je veux la valeur de l'attribut "name" qui est situé dans le noeud "attribute"

    Est ce qui existe quelque chose pour remonter à sur un noeud précis ?
    J'ai essayé de faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="../../../attribute/@name"/>
    Le noeud attribute n'est pas directement le parent de FBBlock.
    Comment on appel ça d'ailleurs un oncle ?

    Ma question est peut être bête, et je m'en excuse

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/05/2008, 15h28
  2. Récupération des attributs d'un noeud
    Par masseur dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 31/03/2008, 17h51
  3. [Spring WEBFLOW] Récupération des attributs
    Par cameleon2002 dans le forum Spring Web
    Réponses: 1
    Dernier message: 18/03/2008, 11h02
  4. [DOM XML] Récupération des attributs dans un flux xml
    Par opeo dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 11/04/2007, 17h35
  5. Réponses: 4
    Dernier message: 26/04/2005, 11h35

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