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 & Concat] Est-ce possible?


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 [XSL & Concat] Est-ce possible?
    Bonjour à tous!

    J'aurai aimé avoir un petit coup de main sur la transformation XLS, couplé à l'utilisation d'un concat. Le principe est assez simple. J'ai deux balises dans mon fichier XML d'entrée, et j'ai besoin de les concaténer dans une seule dans mon fichier de sortie. Le principe est que ces deux champs me permettent de définir une clé "unique" (pour l'instant) dans mon fichier de sortie

    Pour le moment, mon XLS ressemble à ca:

    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
     
    <?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"/> 
     
     
    	<xsl:template match="row">
     	<ITEM>
     	<xsl:attribute name="class">New_Person</xsl:attribute>
    	<xsl:apply-templates/>
    	</ITEM>
    	</xsl:template>
     
    		<xsl:template match="NOM">
    			<item_id>
    			<xsl:value-of select="concat(NOM,'-',PRENOM)"/>
    			</item_id>
    		</xsl:template>
     
    		<xsl:template match="PRENOM">
     
    		</xsl:template>
    </xsl:stylesheet>
    Et bien évidemment... Ça ne fonctionne pas... Est ce que je dois impérativement utiliser des paramètres, des for each, autre? Je sèche complètement car avant d'arriver à ce résultat, j'ai eu énormément de problème de variables non définies ou non joignables, etc....

    Merci d'avance pour votre aide!

    EDIT: JE continue d'essayer d'avancé sur ce XSL, et la pause repas m'a déjà donné une piste "Damnit!". Car les champs sont vides dans mon fcihier de sortie... Il faut mettre:

    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
     
    <?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"/> 
     
     
    	<xsl:template match="row">
     	<ITEM>
     	<xsl:attribute name="class">New_Person</xsl:attribute>
    	<xsl:apply-templates/>
    	</ITEM>
    	</xsl:template>
     
    		<xsl:template match="NOM">
    			<item_id>
    			<xsl:value-of select="concat(text(),'-',PRENOM)"/>
    			</item_id>
    		</xsl:template>
     
    		<xsl:template match="PRENOM">
     
    		</xsl:template>
    </xsl:stylesheet>
    Maintenant, le problème est de récupérer le text() de PRENOM.... Je pense ne plus être trop loin!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    Hello,

    par exemple en "remontant d'un cran", genre avec ../ ?
    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
    Citation Envoyé par thelvin Voir le message
    Hello,

    par exemple en "remontant d'un cran", genre avec ../ ?
    Je n'ai pas bien compris l'idée. Mais je n'ai pas non plus donné la précision: Dans mon fichier XML d'entrée, les nœuds NOM et PRENOM sont au même niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <PERSON>
    		<row>
    			<PRENOM><![CDATA[Jean]]></PRENOM>
    			<NOM><![CDATA[DUPOND]]></NOM>
    			<ADRESSE><![CDATA[Developpez.net]]></ADRESSE>
    			<MAIL><![CDATA[support@admin.com]]></MAIL>
    			<PHONE><![CDATA[]]></PHONE>
    			<STATUS><![CDATA[Ative]]></STATUS>
    		</row>
    </PERSON>
    Et dans mon fichier suite à la transformation, j'ai besoin d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ITEM class="New_Person">
    <item_id>DUPOND-Jean</item_id>
    </ITEM>

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    Ah, ils sont au même niveau...

    Mais c'est curieux, non ? Quand tu demandes text() à l'intérieur du pattern NOM, ça te donne le texte qui est dans la balise <NOM> mais pas celui qui est dans la balise <PRENOM>. Bizarre, bizarre, pourtant ils sont au même niveau, n'est-ce pas...

    On croirait presque que le template sur NOM s'intéresse au contenu de NOM et non pas à ce qui est à côté de NOM. Peut-être que c'est comme ça que fonctionnent XSLT et la logique humaine ! Vite, il faut essayer !
    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
    Pour moi, le template NOM ne s'intéresse qu'au contenu du NOM en effet, mais à cause de la valeur match="NOM". Et comme PRENOM est ailleurs (comme la vérité), il ne sait pas me récupérer la valeur de l'autre balise. peut être avec '.', je vais essayer de ce pas.

    EDIT: Je confirme, le "." ne me rapporte que le contenu du pattern NOM. Du coup, je pense être obligé de passer par une variable temporaire pour faire le concat dans le template PRENOM....

    Edit #2: Je pensais que ça allait être simple... Que nenni!
    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
     
    	<xsl:output  omit-xml-declaration="yes" encoding="ISO-8859-1" indent="yes" method="xml" version="2.0"/> 
     
    	<xsl:variable name="h1"></xsl:variable>
     
    	<xsl:template match="row">
    		<ITEM>
    			<xsl:attribute name="class">New_Person</xsl:attribute>
    			<xsl:apply-templates/>
    		</ITEM>
    	</xsl:template>
     
    	<xsl:template match="NOM">
    		<xsl:variable name="h1">
    			<xsl:value-of select= "text()"/>
    		</xsl:variable>			
    	</xsl:template>
     
    	<xsl:template match="PRENOM">
    		<item_id>
    			<xsl:value-of select="concat(h1,'-',text())"/>
    		</item_id>
    	</xsl:template>
    Je n'ai que -Jean.. et pas le NOM (que le concat contienne h1 ou $h1)

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    . ne marche pas ? Diantre !
    Et .. le symbole universel pour remonter d'un cran dans une arborescence, est-ce qu'on pourrait s'en servir ?
    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
    Citation Envoyé par thelvin Voir le message
    . ne marche pas ? Diantre !
    Et .. le symbole universel pour remonter d'un cran dans une arborescence, est-ce qu'on pourrait s'en servir ?
    Ben en fait, je ne vois pas comment... donc je n'ai pas de réponse...

  8. #8
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    ...je te suggère de lire quelques tutoriels sur les XPATH et leur fonctionnement (la solution ayant été donnée par thelvin).

    Il faut que tu maîtrise à minima le concept sinon tu ne vas pas t'en sortir...
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  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
    Je vais regarder ca alors. Car entre XPATH, XSL, XST, DTD, XSD... Je commence à peu à m'y perdre.

    En espérant pouvoir enfin régler ce problème.

    Merci

  10. #10
    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
    Wouhou!!! Moulte merci!

    Après avoir un peu pris peur sur l'utilisation d'XPATH dans du Java, j'ai finalement trouvé un tuto très complet sur xpath!

    Donc la réponse à mon problème était finalement... toute bête....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	<xsl:template match="NOM">
    	<xsl:value-of select="concat(text(),'-',../PRENOM)"/>		
    	</xsl:template>
    			<
    Merci pour les info, car ca m'a aussi permis de voir énormément de fonctions XPATH qui vont m'être très utile!

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

Discussions similaires

  1. Est-il possible de générer un .html a partir d'un XML et XSL?
    Par Jayceblaster dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/04/2006, 15h19
  2. Est-il possible d'utiliser des fichiers xsl en cascade ?
    Par Faekk dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/08/2005, 12h34
  3. Réponses: 3
    Dernier message: 29/07/2003, 09h38
  4. Réponses: 2
    Dernier message: 16/05/2003, 10h14
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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