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] Noeuds à écarter


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut [XSLT] Noeuds à écarter
    Bonjour à tous,

    Voilà mon projet est fini, merci beaucoup pour votre aide! Je viens tout de même pour une dernière information. On me demande d'aller un peu plus loin dans la gestion de mon fichier XSL, notamment sur la "maintenabilité".

    Actuellement, dans mon fichier d'entrée, j'ai toujours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <LDAP>
    <Personne>
    	<Nom>DUPOND</Nom>
    	<Prenom>Jean</Prenom>
    	<DOB>01-01-1960</DOB>
    	<Adresse>Paris</Adresse>
    	<Tel>0123456789</Tel>
    </Personne>
    </LDAP>
    mais j'ai aussi des noeuds qui ne me servent à rien, genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <LDAP>
    <Loisir>
    	<Nom>DUPOND</Nom>
    	<Prenom>Jean</Prenom>
    	<Comment>Football Rugby Jeux Vidéos</Comment>
    </Loisir>
    </LDAP>
    Et le "seul" moyen que j'ai trouvé pour ne pas inclure ces informations dans mon fichier de sortie, c'est de mettre dans mon XSL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:template match="LDAP/Personne">
    	<!-- Tout mon mapping pour ce qui m'interesse dans le noeud Personne -->
    </xsl:template>
     
    <xsl:template match="LDAP/Loisir">
    	<xsl:comment>Loisirs inutiles dans nouveau format</xsl:comment>
    </xsl:template>
    Actuellement, si le noeud loisir change, je suis obligé de revoir mon XSL. De la même façon, si un nouveau noeud apparaît dans mon fichier d'entrée, je suis obligé de rajouter un noeud match dans mon XSL.

    J'ai voulu remplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="LDAP/Personne">
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="LDAP/Personne">
    , mais cela n'a pas fonctionné.

    Encore merci pour les informations sur cet ultime point!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ben c'est un peu flou, mais moi je mettrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="LDAP/*">
      <xsl:comment>Balise ignorée du fichier source: <xsl:value-of select="name()"/></xsl:comment>
    </xsl:template>
    Comme ça tout ce qui n'est pas explicitement traité, est implicitement ignoré.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bonjour Thelvin

    C'est ce que j'ai fait dans la nouvelle version.

    Mais pour moi (mais je me trompe peut être) le problème initial reste le même: si un nouveau noeud apparait, il ne sera pas traité, sauf si on met un noeud template match avec du contenu.... Le seul avantage que j'y ai trouvé, c'est que si le noeud "Loisir" devient "Hobby", il ne sera pas traité par le XSL, sans qu'on ait besoin de le modifier...

    Je vais voir, la réponse est peut-être juste aussi bête que ca, mais je la trouve trop simple en fait (par rapport a tout le reste )

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Je ne comprends pas, tu penses qu'un nouveau nœud ne répondrait pas au template * ?
    Pourquoi ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Mettons que demain, le fichier d'entrée possède un noeud supplémentaire dans LDAP. Vu qu'il est dans la cascade LDAP/*, il ne sera pas traité. Idem pour le changement du nom d'un noeud déjà existant (ou même de ses attributs). Tant qu'il fait parti de LDAP/* à priori, pas de soucis. Donc c'est peut être la réponse attendue....

    Par contre, l'ajout de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="LDAP/*">
    	<xsl:comment>Cas non traités</xsl:comment>
    </xsl:template>
    ne traite plus les template match qui se trouvent dans le XSL. En gros, ca ne traite plus les noeuds "Loisir", cool, mais ca ne traite plus non plus les noeuds "Personne", moins cool!

    J'ai aussi tenté le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:template match="LDAP/*">
    	<xsl:template match="LDAP/Personne">
    		<!-- Traitement des noeuds Personne -->
    	</xsl:template>
    </xsl:template>
    mais ca ne fonctionne pas non plus...

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Je ne comprends pas : si tu veux traiter les nœud Personne, il va te falloir un template Personne de toute façon...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Je vais reformuler alors. Mon fichier d'entrée est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <LDAP>
    	<Personne>
    		<Nom>DUPOND</Nom>
    		<Prenom>Jean</Prenom>
    		<DOB>01-01-1960</DOB>
    		<Adresse>Paris</Adresse>
    		<Tel>0123456789</Tel>
    	</Personne>
    	<Loisir>
    		<Nom>DUPOND</Nom>
    		<Prenom>Jean</Prenom>
    		<Comment>Football Rugby Jeux Vidéos</Comment>
    	</Loisir>
    </LDAP>
    Mon fichier XSL fonctionnel est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="LDAP/Personne">		
    	<person_id><xsl:value-of select="concat(Nom,Prenom)"/></person_id>
    	<!-- + Autres traitements spécifiques aux noeuds Personne-->
    </xsl:template>
    <xsl:template match="LDAP/Loisir">
    </xsl:template>
    En effet, si je ne met pas le template match="LDAP/Loisir", les informations stockés sur les balises sont écrites dans mon fichier de sortie, sans aucune synthaxe. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Person>
    	<Person_ID>DUPONDJean</Person_ID>
    </Person>
    DUPONDJeanFootball Rugby Jeux Vidéos

    Problème posé: Comment faire en sorte que l'ajout de nouveaux noeuds dans mon fichier d'entrée n'implique pas une modification de mon fichier XSL? Idéalement, comment s'assurer que les évolutions des noeuds actuellement non traités (comme loisir) n'impliquent pas une modification du XSL?

    J'étais parti aussi sur un XSL modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="LDAP/Personne">		
    	<person_id><xsl:value-of select="concat(Nom,Prenom)"/></person_id>
    	<!-- + Autres traitements spécifiques aux noeuds Personne-->
    </xsl:template>
    <xsl:template match="LDAP/*">
    </xsl:template>
    Mais cela ne fonctionne pas (les noeuds personne ne sont plus traités). Du coup j'ai aussi tenté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:template match="LDAP/*">
    	<xsl:template match="LDAP/Personne">		
    		<person_id><xsl:value-of select="concat(Nom,Prenom)"/></person_id>
    		<!-- + Autres traitements spécifiques aux noeuds Personne-->
    	</xsl:template>
    </xsl:template>
    mais cela ne fonctionne pas non plus.

    EDIT: Ah oui en fait je commence à comprendre la demande! Car j'ai appliqué cette logique partout! Et oui, j'ai des "balises" qui ne me servent pas dans Personne... Du coup, j'ai aussi d'autres lignes dans mon XSL que je n'avais pas vu:
    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="LDAP/Personne">		
    	<person_id><xsl:value-of select="concat(Nom,Prenom)"/></person_id>
    	<!-- + Autres traitements spécifiques aux noeuds Personne-->
    </xsl:template>
    <xsl:template match="LDAP/Loisir">
    </xsl:template>
    <xsl:template match="LDAP/Personne/Matricule">		
    </xsl:template>
    <xsl:template match="LDAP/Personne/Sexe">		
    </xsl:template>
    <xsl:template match="LDAP/Personne/DateEntree">		
    </xsl:template>
    Je vois mieux les impacts en cas de changements du fichiers d'entrée du coup

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par Tomtom31 Voir le message
    Mais cela ne fonctionne pas (les noeuds personne ne sont plus traités).
    Tu es sûr de ça ?

    Parce que si oui, c'est un bug de ton moteur XSLT. match="LDAP/*" ne s'applique pas si match="LDAP/Personne", qui est mieux spécialisé, peut s'appliquer à la place.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Oui oui, j'ai même essayé (bêtise mais dans ces moments là...) de déplacer le match LDAP/* à la fin du fichier....

    En gros il n'y a que le LDAP/* qui est traité (j'ai d'ailleurs une seule occurrence dans mon fichier de sortie....)

    EDIT: Alors hier soir, suite à mon message, j'ai poussé un peu plus mes tests. En fait, j'ai autant de commentaires dans mon fichier de sortie que de noeuds différents. En l'occurrence, sur l'exemple donné, j'ai 2 commentaires dans mon fichier de sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <!-- Balise ignorée du fichier source: Personne -->
    <!-- Balise ignorée du fichier source: Loisir -->
    Et pour le moteur XSLT, je ne suis pas sur de savoir comment le changer... Pour le moment, dans tous mes fichiers XSL, l'entête est déclaré comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     
    <xsl:stylesheet version="3.0" 
     
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    	xmlns:xs="http://www.w3.org/2001/XMLSchema"
    	xmlns:fn="http://www.w3.org/2005/xpath-functions"
    	xmlns:xdt="http://www.w3.org/2005/xpath-datatypes"
    	xmlns:err="http://www.w3.org/2005/xqt-errors"
    	exclude-result-prefixes="xs xdt err fn">
     
    	<xsl:output  omit-xml-declaration="yes" encoding="ISO-8859-1" indent="yes" method="xml" version="2.0"/>

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Une façon de le faire est de contrôler plus rigoreusement le progrès de matching...
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="LDAP">
        <xsl:apply-templates select="Personne" />
    </xsl:template>
    <xsl:template match="Personne[local-name(parent::*)='LDAP']">
         <!-- ce que vous avz voulu -->
    </xsl:template>
    En tout cas, la syntaxe de xsl:template nesté de la façon
    <xsl:template match="xxx">
    <xsl:template match="yyy">
    <!-- etc etc -->
    </xsl:template>
    </xsl:template>
    est _toujours_ incorrect, sans exception. Le schéma du xslt ne le permet pas.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci pour cette astuce.

    Malheureusement, lorsque je souhaite utiliser le apply:template, l'outil de notepad++ m'indique une erreur: Unable to parse schema file lorsque je souhaite appliquer le XSL au fichier XML source

    En fait, les noeuds Personne que je souhaite traiter se trouvent dans des niveaux inférieurs, donc j'ai voulu remplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="Personne[local-name(parent::*)='LDAP']">
    par l’arborescence réel des noeuds Personne, à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="Personne[local-name(acestor::*)='LDAP/BASEUSER/INFODATA']">
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:template match="LDAP">
        <xsl:apply-templates select="./BASEUSER/INFODATA/Personne" />
    </xsl:template>
    <xsl:template match="LDAP/BASEUSER/INFODATA/Personne">
         <!-- blablabla -->
    </xsl:template>
    sans plus de succès.... Moi qui pensais que ce problème était tout simple, je commence à déchanter....

  12. #12
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne dirais pas ce problème est tout simple, pourtant ce n'est pas tout compliqué non plus, loins de là dans ce sens précis : le langage xslt est aisément positionné de le faire. Dans le langage procédural, compliqué serait une qualification par degré plus vrai.

    Si Personne n'est pas d'enfant direct de LDAP, c'est un élément nouveau. On fait ça.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="LDAP">
        <xsl:copy>
            <xsl:apply-templates select=".//Personne" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Personne[ancestor::LDAP]">
        <!-- etc etc -->
    </xsl:template>
    Je mets xsl:copy pour s'assurer le résultat étant certainement bien-formé. Si ce n'est pas un souci, enlevez-le tout simplement.

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ya pas besoin de faire si compliqué, il suffit de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="Personne">
      <!-- Le traitement de Personne -->
    </xsl:template>
     
    <!-- Et on ignore tout le reste -->
    <xsl:template match="*">
    </xsl:template>
    C'est la même chose qu'avant, sauf qu'on met pas LDAP/ devant.
    Le LDAP/ devant ne servait à rien, je le laissais juste parce qu'en principe, il n'est pas gênant non plus. Mais forcément, si <Personne> n'est pas un fils direct de <LDAP> ça ne va pas, évidemment -_-°...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ya pas besoin de faire si compliqué, il suffit de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="Personne">
      <!-- Le traitement de Personne -->
    </xsl:template>
     
    <!-- Et on ignore tout le reste -->
    <xsl:template match="*">
    </xsl:template>
    C'est la même chose qu'avant, sauf qu'on met pas LDAP/ devant.
    Le LDAP/ devant ne servait à rien, je le laissais juste parce qu'en principe, il n'est pas gênant non plus. Mais forcément, si <Personne> n'est pas un fils direct de <LDAP> ça ne va pas, évidemment -_-°...
    J'avais adapté la solution à mon schema de XML d'entrée, je te rassure!

    Mais avec cette solution, j'ai toujours le problème du moteur XSLT... en mettant match=LDAP/*, il ne traite rien du tout des autres match que j'ai renseigné. Et en mettant match=* je n'ai qu'un commentaire <!--Cas non traites LDAP--> (les autres match plus spécialisés ne sont pas traités non plus). En gros, avec LDAP/*, j'ai autant de commentaires <!--Cas non traites XXXXXXX--> que de balises différentes dans LDAP, et en mettant *, il s’arrête sur le noeud root LDAP...

    Du coup, pendant que je vais tenter la solution de tsuji, comment peut-on changer le moteur XSLT ? car je croyais que c'était le xmlns: xsl="http://www.w3.org/1999/XSL/Transform" qui définissait le moteur à utiliser.... Comment le modifier/le mettre à jour?

    EDIT: Alors je viens de refaire proprement l'idée proposée par Tsuji... et à ma grande surprise... J'ai toujours la problème des noeuds non traités pour lesquels les données apparaissent (ça commence à me rendre fou!).
    Dans mon fichier XSL, j'ai mis simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:template match="LDAP">
     
    	<xsl:apply-templates select="./BASEUSER/INFODATA/Personne"/>
     
    </xsl:template>
     
    <xsl:template match="LDAP/BASEUSER/INFODATA/Personne">
         <!-- blablabla -->
    </xsl:template>
    et dans mon fichier de sortie, j'ai encore les informations des noeuds Loisir qui sont affichés sans aucune synthaxe....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Person>
    	<Person_ID>DUPONDJean</Person_ID>
    	<!-- blablabla -->
    </Person>
    DUPONDJean
    Football Rugby Jeux Vidéos
    Pour info, les données dans mon fichier XML d'entrée sont formatées comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Personne>
    	<Nom><![CDATA[DUPOND]]></Nom>
    	<Prenom><![CDATA[Jean]]></Prenom>
    	<DOB><![CDATA[01-01-1960]]></DOB>
    	<Adresse><![CDATA[Paris]]></Adresse>
    	<Tel><![CDATA[0123456789]]></Tel>
    </Personne>
    Est ce que ça peut être ça l'origine du problème?

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par Tomtom31 Voir le message
    Du coup, pendant que je vais tenter la solution de tsuji, comment peut-on changer le moteur XSLT ? car je croyais que c'était le xmlns: xsl="http://www.w3.org/1999/XSL/Transform" qui définissait le moteur à utiliser.... Comment le modifier/le mettre à jour?
    Euh, non. Pour changer de moteur XSLT, on utilise un autre programme que celui qu'on utilisait avant.
    Tu vois, le programme dans lequel tu cliquais pour qu'il se passe une transformation XSLT ? Il ne faut plus que ce programme soit lancé ou que tu cliques dedans. À la place il faut aller chercher, installer et démarrer un autre programme, et que ce soit lui qui fasse les transformations XSLT.

    En fait le mieux ce serait de nous dire comment tu lances une transformation.

    Citation Envoyé par Tomtom31 Voir le message
    et dans mon fichier de sortie, j'ai encore les informations des noeuds Loisir qui sont affichés sans aucune synthaxe....
    De toute façon, si ton moteur XSLT fait n'importe quoi, on va pas deviner quels genres de trucs il faut faire pour qu'il soit content...

    Mais bon, ça vient d'où, ça, Football Rugby Jeux Vidéos ?

    Citation Envoyé par Tomtom31 Voir le message
    Est ce que ça peut être ça l'origine du problème?
    Je ne vois rien de problématique là-dedans, mais bon, ton moteur XSLT se sentant apparemment libre de faire ce qu'il veut, va savoir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Alors pour mes tests, j'utilise deux méthodes (qui pour le moment m'ont toujours ramener le même résultat):

    - NotePad++ avec le pluggin XML Tools en v2.4.7
    - un code en VB qui utilise un élément XslCompiledTransform dans lequel je cahrge mon XSL, pui sur lequel j'utilise la fonction .Transform pour appliquer le XSL à mon XML d'entrée.

    Pour les infos Football, etc... cela vient du noeud Loisir, qui se trouve au même endroit que le noeud Personne (même arboresence):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	<LDAP>
    		<BASEUSER>
    			<INFODATA>
    				<Loisir>
    					<Nom>DUPOND</Nom>
    					<Prenom>Jean</Prenom>
    					<Comment>Football Rugby Jeux Vidéos</Comment>
    				</Loisir>
    			</INFODATA>
    		</BASEUSER>
    	</LDAP>

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ouais, eh ben, concernant tes outils XSLT...

    VB ça va pas être possible pour moi, alors je ne sais pas. Mais tu dis qu'il donne les mêmes résultats le Notepad++ XML Tools.
    Alors j'ai essayé ce Notepad++ XML Tools.

    Voici le fichier XML que je lui donne en entré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
    <?xml version="1.0"?>
    <LDAP>
      <BASEUSER>
        <INFODATA>
    			<Personne>
    				<Nom><![CDATA[DUPOND]]></Nom>
    				<Prenom><![CDATA[Jean]]></Prenom>
    				<DOB><![CDATA[01-01-1960]]></DOB>
    				<Adresse><![CDATA[Paris]]></Adresse>
    				<Tel><![CDATA[0123456789]]></Tel>
    			</Personne>
    			<Loisir>
    				<Nom><![CDATA[DUPOND]]></Nom>
    				<Prenom><![CDATA[Jean]]></Prenom>
    				<Comment><![CDATA[Football Rugby Jeux Vidéos]]></Comment>
    			</Loisir>
    		</INFODATA>
      </BASEUSER>
    </LDAP>
    Un truc fumeux reconstitué à partir de ce que tu as dit que tu avais comme XML.

    Voici le fichier XSLT que j'utilise :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output indent="yes"/>
     
      <!-- Un truc pour aller chercher les balises qui nous intéressent -->
      <xsl:template match="LDAP">
        <LDAP>
    	  <xsl:apply-templates select="./BASEUSER/INFODATA/Personne"/>
    	</LDAP>
      </xsl:template>  
     
      <xsl:template match="Personne">
        <!-- Le traitement de Personne -->
    	<Person>
    	  <Person_ID>
    	    <xsl:value-of select="concat(Nom, Prenom)"/>
    	  </Person_ID>
    	</Person>
      </xsl:template>
     
      <!-- Et on ignore tout le reste -->
      <xsl:template match="*">
      </xsl:template>
     
    </xsl:stylesheet>
    Tu disais "ouais OK j'ai adapté mais ça marche pas"

    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <LDAP>
      <Person>
        <Person_ID>DUPONDJean</Person_ID>
      </Person>
    </LDAP>
    Ça marche parfaitement. Tu nous avais demandé ça, on te l'a obtenu :
    - La balise <Personne> est correctement traitée, son résultat apparaît
    - Aucune autre balise ne vient parasiter le résultat, il n'y a pas trace de <Loisir>
    - Pour gérer d'autres balises, il suffit d'ajouter un template pour elles, et de remplacer le template root par select="./BASEUSER/INFODATA/*", ou éventuellement select="//*" dans des cas plus compliqués (mais on a pas abordé un tel cas).

    Donc clairement il y a une incompréhension quelque part.
    Alors on recommence depuis le début : tu as quoi, tu veux quoi, tu as essayé quoi, et sans aucune erreur, merci.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    C'est exactement ça que je veux

    Mais je ne comprends pas pourquoi cela ne fonctionne pas chez moi...

    Vu que j'ai déjà tout repris, je vais voir ou est ce qu'il y a une différence (déjà, je n'avais pas mis les apply templates entre les balises LDAP).

    EDIT: Bon je suis un énorme boulet...... j'ai fait descopier coller bourrés de fautes, du coup j'avais des select à la place de match, des match à la place de select..... En remettant les select dans les apply templates et les match dans les tempate, tout est OK.... Vraiment désolé pour ces grossières erreurs..... Et merci beaucoup pour l'aide et surtout pour la patience. Si vous me cherchez, je suis parti me pendre

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

Discussions similaires

  1. [XSLT] noeud vide
    Par khamkham dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/04/2010, 15h11
  2. [XSLT] noeud à plat >> arborescence
    Par theos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 24/11/2008, 10h09
  3. [XSLT] Noeud precedent et boucles imbriquees
    Par crevygood dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/05/2008, 16h29
  4. [XSLT] Noeuds vides
    Par err747 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/03/2008, 23h37
  5. [XSLT] Noeud courant
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 31/10/2006, 14h33

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