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 :

Xls - ajout de balise


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut Xls - ajout de balise
    Bonjour,

    Je suis débutant en Xsl et j'aimerais savoir si il est possible de créer dans un fichier xml une balise à condition que cette dernière n'existe pas déjà? Je m'explique avec un exemple :
    Fichier d'origine:

    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
     
    <personnes>
      <personne id=1>
        <name type="Principal">
          <nom>NOM</nom>
          <prenom>PRENOM</prenom>
        </name>
        <name type="Secondaire">
          <nom>NOM</nom>
          <prenom>PRENOM</prenom>
        </name>
      </personne>
      <personne id=2>
        <name type="Principal">
          <nom>NOM</nom>
          <prenom>PRENON</prenom>
        </name>
      </personne>
    </personnes>
    Le but serait donc de créer dans <personne id=2> la balise <name type="Secondaire"> vu que cette dernière n'existe pas.

    Merci d'avance.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est tout à fait possible, de la même manière que dans les langages impératifs.

    Si <tester si la balise est absente>
    Alors <créer la balise>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    Merci pour ta réponse mais c'est justement le test pour vérifier si la balise est présente ou non qui me pose problème car je suis obligé de contrôler la valeur "Type" de ma balise <name> pour chercher le terme "Secondaire". Sais tu syntaxiquement ce que ça donnerait?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:if test="not(balise[ condition sur @attribut])">
      <balise attribut="chose">
        <contenu/>
      </balise>
    </xsl:if>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    Je n'arrive pas à mettre en place ta solution, voici le template que j'applique à mon fichier :
    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
     
    <xsl:template match="personnes">		
    		<personnes>	
    			<xsl:for-each select="personne">
    				<personne>	
    					<xsl:for-each select="name">				
    						<xsl:variable name="type" select="@type"/> 														
    						<name type="{$type}">	
    							<nom><xsl:value-of select="nom"/></nom>
    							<prenom><xsl:value-of select="prenom"/></prenom>
    						</name>		
    						<xsl:if test="not(name[$type = Secondaire])">
    							<name type="Secondaire">
    								<nom>NOM</nom>
    								<prenom>PRENOM</prenom>
    							</name>	
    						</xsl:if>	
    					</xsl:for-each>	
    				</personne>	
    			</xsl:for-each>	
    		</personnes>
    	</xsl:template>
    J'ai en sortie ce résultat :
    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
     
    <personnes>
      <personne>
        <name type="Principal">
    	  <nom>NOM</nom>
    	  <prenom>PRENOM</prenom>
    	</name>
    	<name type="Secondaire">
    	  <nom>NOM</nom>
    	  <prenom>PRENOM</prenom>
    	</name>
    	<name type="Secondaire">
    	  <nom>NOM</nom>
    	  <prenom>PRENOM</prenom>
    	</name>
    	<name type="Secondaire">
    	  <nom>NOM</nom>
    	  <prenom>PRENOM</prenom>
    	</name>
      </personne>
      <personne>
        <name type="Principal">
    	  <nom>NOM</nom>
    	  <prenom>PRENON</prenom>
    	</name>
    	<name type="Secondaire">
    	  <nom>NOM</nom>
    	  <prenom>PRENOM</prenom>
    	</name>
      </personne>
     </personnes>

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    - tu as oublié les quotes autour de "Secondaire" pour que ça soit considéré comme une string.
    - cette variable type ne sert à rien, encourage les bugs, et, dans ton cas, en provoque un.
    - Attention le niveau d'imbrication.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    OK sur le principe de ne pas utiliser la variable type mais je ne vois pas du coup quelle autre méthode utiliser?

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    A priori, au lieu de la variable, tu utilises directement ce que tu voulais mettre dans la variable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    C'est ce que j'ai fait en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:if test="not(name[@type = 'Secondaire'])">
    J'ai le même résultat...

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par thelvin Voir le message
    - Attention le niveau d'imbrication.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    J'ai du mal à voir comment l'imbrication peut influer sur le fait qu'un <xsl:if> marche... En effet, j'ai l'impression que le test effectué dans mon if renvoie toujours true, même quand on arrive au niveau d'une balise "Secondaire".

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ne pas confondre : indentation et imbrication.
    Vérifie dans quel for-each tu devrais tester ça et insérer des nouvelles balises au besoin.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    J'ai modifié l'imbrication mais toujours pas de résultat escompté :
    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
     
    <xsl:template match="personnes">		
    		<personnes>	
    			<xsl:for-each select="personne">
    				<personne>	
    					<xsl:for-each select="name">
    						<xsl:if test="not(name[@type = 'Secondaire'])">
    							<name type="Secondaire">
    								<nom>NOM</nom>
    								<prenom>PRENOM</prenom>
    							</name>	
    						</xsl:if>	
    					</xsl:for-each>
    				</personne>	
    			</xsl:for-each>	
    		</personnes>
    	</xsl:template>
    J'ai en sortie tous les "Princiapl" qui ont été changés en "Secondaire" :
    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
     
    <personnes>
      <personne id=1>
        <name type="Secondaire">
          <nom>NOM</nom>
          <prenom>PRENOM</prenom>
        </name>
        <name type="Secondaire">
          <nom>NOM</nom>
          <prenom>PRENOM</prenom>
        </name>
      </personne>
      <personne id=2>
        <name type="Secondaire">
          <nom>NOM</nom>
          <prenom>PRENON</prenom>
        </name>
      </personne>
    </personnes>

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Cj_Dal Voir le message
    J'ai modifié l'imbrication
    ? Le test est toujours dans le même for-each.
    Je dirais que tu n'as rien changé du tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    Je me suis mal exprimé, j'ai plus simplifié le code pour ne gérer que la partie création de la nouvelle balise. Je constate en tout cas que la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:if test="not(name[@type = 'Secondaire'])">
    ne marche tout simplement pas et ce n'est pas une question d'imbrication.
    De plus, je pense que c'est placé dans le bon bloc for-each car c'est celui qui parcourt les balise <name>.

    Qu'en penses tu?

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    J'en pense que c'est équivalent à dire :

    - "J'ai testé ceci d'une manière dont on m'a dit plusieurs fois qu'elle est erronée, et ça n'a pas marché. Pour l'instant je n'ai rien essayé dont on ne m'ait pas dit que c'est erroné. J'en déduis que ça ne marcherait pas non plus en essayant d'autres manières."

    - "Non non, tu te trompes, ça ne sert à rien d'essayer ce que tu me proposes."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Par défaut
    Thelvin,
    Désolé pour ces hésitations mais c'est vraiment la toute première fois que je manipule des fichiers xml... Tu avais raison en remontant dans le <xsl:for-each select="personne">, cela ajoute correctement ma balise. Ce que j'avais du mal à saisir, c'est que vu que le if renvoyait toujours "TRUE", on pouvait croire que la syntaxe était pas bonne, je n'aurais pas hésité si FALSE était renvoyé...

    Bref merci de ta patiente

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Good.

    Je suppose que dès qu'on obtient le résultat, tout s'éclaire. Sinon on peut toujours expliquer pourquoi le test devait être dans la boucle englobante et non pas englobée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [RSS] Ajout de balises personalisées ?
    Par fulgaro dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 10/03/2007, 09h44
  2. Ajout de balises HTML
    Par vmal dans le forum Langage
    Réponses: 5
    Dernier message: 09/09/2006, 12h28
  3. [JEditorPane]ajout de balises html
    Par almass dans le forum Composants
    Réponses: 12
    Dernier message: 12/05/2004, 17h07
  4. XLS - Nom des balise
    Par lakrimo dans le forum XMLRAD
    Réponses: 2
    Dernier message: 05/02/2004, 11h12

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