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

Format d'échange (XML, JSON...) Java Discussion :

Utilisation d'un fichier XSL avec du code Java


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut Utilisation d'un fichier XSL avec du code Java
    Bonjour tout l'monde

    J'ai un fichier DTA à analyser (un flux à balancer sur une base de données en fait).

    J'utilise un fichier XSL pour placer les données sur la BDD en exécutant un batch. Je n'avais pas de problème pour le moment avec mes autres fichiers, car c'était de simples "copies' de données à mettre sur la BDD.

    Mais pour ce flux, je dois en fait checker la valeur d'une des colonnes du DTA, si elle est > à 10 000, je vais chercher le libellé associé à cette valeur dans une table de la BDD pour pouvoir insérer dans la table cible (qui possède que 2 champs) la valeur et le libellé.

    Le libellé est récupéré via du code java par la méthode getGroupeByTier(valeurColonne2) de la classe GroupeRetriever

    Voici un exemple du fichier DTA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "00030    "|"10092    "|1   |"2000-01-01"|"2039-12-31"|" "|"               "|"                                                  "
    "00033    "|"10698    "|1   |"2000-01-01"|"2039-12-31"|" "|"               "|"                                                  "
    "00035    "|"10018    "|2   |"2000-01-01"|"2039-12-31"|" "|"               "|"                                                  "
    Voici le 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
    <!-- *************************** Pour chaques lignes************************************************************************* -->
    	<xsl:template match="ligne">
    		<xsl:element name="ligne">
    			<!-- ********************* table GROUPE *************************************-->
    			<xsl:element name="table">
    				<xsl:attribute name="nom">GROUPE</xsl:attribute>
                    <xsl:attribute name="retriever">com.cerpbn.extranet.metier.reglesGestions.GroupeRetriever</xsl:attribute>
     
                    <xsl:element name="colonne">
    					<xsl:attribute name="nom">GRO_ID</xsl:attribute>
                        <xsl:attribute name="pk">y</xsl:attribute>
    					<xsl:attribute name="type">INTEGER</xsl:attribute>
    					<xsl:attribute name="size">11</xsl:attribute>
    				</xsl:element>
     
    				<xsl:element name="colonne">
    					<xsl:attribute name="nom">GRO_LIBELLE</xsl:attribute>
    					<xsl:attribute name="type">VARCHAR</xsl:attribute>
    					<xsl:attribute name="size">255</xsl:attribute>
                        <xsl:attribute name="join">GRO_ID</xsl:attribute>
                        <xsl:if test="@name = 'GROID'" > 10 000>
                            <xsl:attribute name="method">getGroupeByTier(GRO_ID)</xsl:attribute>
                            <xsl:attribute name="class">com.cerpbn.extranet.metier.reglesGestions.GroupeRetriever</xsl:attribute>
                        </xsl:if> // ligne évidemment fausse, mais c'est l'idée que je veux développer
                    </xsl:element>
     
    			</xsl:element>
    		</xsl:element>
    	</xsl:template>

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Oui bon d'accord mais quelle est la question ?

    exemple d'utilisation de java depuis xsl :
    http://www17.homepage.villanova.edu/...haus/xsl/java/
    http://www.oxygenxml.com/archives/xs.../msg00331.html

  3. #3
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Comment je fais, dans mon fichier xsl, pour récup ma valeur de la 2° colonne de mon fichier DTA en faisant un "Si thisValue > 10000 alors ajouterDanLaBdd(LaValeur+getLibelle(thisValue))" où getLibelle ramène le libelle associé à ma valeur en faisant une requête select dans la bdd !

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    les liens que j'avais posté n'étaient pas très bons.

    Si la question est : comment utiliser java dans xls,
    il y a un bon exemple ici :http://jean-luc.massat.perso.luminy....l#idhtex-h3-30

    le code pour récupérer une valeur venant de java dans XSL serait donc :
    <xsl:value-of select="java:getGroupeByTier(valeurColonne2)" />

    Cependant si je comprends bien, il faut que le code java aille chercher une info dans une base à chaque fois que la condition > 10000 est remplie.
    Cela veut dire que si dans le fichier DAT, cette condition est remplie 1000 fois alors on va avoir un millier d'accès !

  5. #5
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Oui ...
    Et en fait 99% des valeurs testées sont > 10 000 et doivent être insérées dans la base, les autres je m'en occupe pas.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Est-ce que le "xsl:value-of select=" fonctionne ?

  7. #7
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Hello désolé de t'avoir fait attendre je reviens de ma pause déjeuner.

    Je dois changer quelque chose dans mon code actuel pour tester ce que tu m'as proposé ?

    Car je comprends pas trop où mettre ma condition avec le code > 10000, si je récupère le mauvais code comment je fais pour que le code xsl ne l'envoie pas sur la bdd ? je dois imbriquer mon code xsl dans la condition ?

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Je n'ai pas testé ce genre de fonctionnalité (xsl + java). Je t'ai indiqué une piste qui me semble intéressante.

    Si j'ai bien compris la mécanique d'ensemble, l'importation du fichier est pilotée par le xsl.
    Par ailleurs, la fonction java getGroupeByTier est capable de renvoyer le libellé requis.

    Donc il ne reste plus qu'à essayer avec la syntaxe proposée sur le site (sinon on n'avance pas)
    quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="@name = 'GROID' > 10000">
       <xsl:value-of select="java:getGroupeByTier(valeurColonne2)" />
    </xsl:if>

  9. #9
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    20/04/2012 15:38:37 - ERROR - impossible de creer un processeur xslt class javax.xml.transform.TransformerConfigurationException msg :javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: Prefix must resolve to a namespace: java
    Je te mets à jour le code du coup que j'ai actuellement :

    Code xml : 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
     
           <xsl:template match="ligne">
    		<xsl:element name="ligne">
    			<!-- ********************* table GROUPE *************************************-->
    		<xsl:element name="table">
    				<xsl:attribute name="nom">GROUPE</xsl:attribute>
                                    <xsl:attribute name="retriever">com.cerpbn.extranet.metier.reglesGestions.GroupeRetriever</xsl:attribute>
     
                                  <xsl:element name="colonne">
    					<xsl:attribute name="nom">GRO_ID</xsl:attribute>
                                            <xsl:attribute name="pk">y</xsl:attribute>
    					<xsl:attribute name="type">INTEGER</xsl:attribute>
    					<xsl:attribute name="size">11</xsl:attribute>
    				</xsl:element>
     
    				<xsl:element name="colonne">
    					<xsl:attribute name="nom">GRO_LIBELLE</xsl:attribute>
    					<xsl:attribute name="type">VARCHAR</xsl:attribute>
    					<xsl:attribute name="size">255</xsl:attribute>
                                            <xsl:attribute name="join">GRO_ID</xsl:attribute>
                                            <xsl:if test="@name = 'GROID'" > 10 000>
                                            <xsl:value-of select="java:getGroupeByTier(GROID)"/>
                                           </xsl:if>
                                   </xsl:element>
     
    				<!-- pour toutes les autre colonnes de GROUPE -->
    				<xsl:for-each select="colonne">
    					<xsl:call-template name="groupe"/>
    				</xsl:for-each>
    			</xsl:element>
    		</xsl:element>
    	</xsl:template>


    Pour le souci, ça vient que "java" est écrit en rouge dans le code, et qu'il me faut déclarer un Extension namespace prefix

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    dans l'exemple de code du dernier lien,
    il y a la déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0"
        xmlns:java="http://xml.apache.org/xslt/java"
        exclude-result-prefixes="java">
     
    ...
    je suppose que cela doit avoir son utilité

    à vrai dire je découvre au fur et à mesure avec toi !
    donc n'hésite pas à creuser aussi de ton côté

  11. #11
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Pas de soucis, je te remercie de m'aider à trouver une solution dans tous les cas. Je suis sur ce projet depuis quelques jours seulement, je découvre également

    Et je cherche de mon côté mais je ne trouve pas grand chose sur le net (j'ai l'impression que peu de gens utilisent ce procédé ou l'ont carrément abandonné).

    En tout cas, pour ta solution mon IDE me sort que "http://xml.apache.org/xslt/java" est une url non enregistrée. Du coup jvais essayer de traficoter les settings pour la rendre viable.

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Ok

    J'ai l'impression que l'usage de java dans xsl doit être assez confidentiel
    car personne d'autre ne s'est manifesté dans la discussion.

    Si ça devient trop galère (genre il faut chercher pendant des jours ...),
    on peut toujours revenir à quelque chose de plus simple :

    - une première routine en java parcourt le fichier ligne par ligne
    - dès qu'il rencontre un ">10000" alors la routine utilise la fonction "getGroupeByTier(valeurColonne2)"
    - la routine sauvegarde les résultats dans un nouveau fichier DAT "enrichi"
    - finalement on importe le nouveau DAT dans la base en utilisant le xsl "de base" (sans java)

    c'est un peu bourrin, pas très élégant, mais on est sûr que ça marche

  13. #13
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Bon j'ai balancé mon url dans la liste des url à ignorer.
    J'ai pu commencer à faire mon traitement mais ça plante :

    20/04/2012 16:55:34 - ERROR - erreur lors de l'insertions des valeurs :
    table : GROUPE
    |->GRO_ID (int) : null
    |->GRO_LIBELLE (varchar) : null

    Je ne vais pas avoir le temps de farfouiller pour trouver ce qui cloche, je repars en formation pendant 2 semaines (je suis en alternance). Du coup, si t'es par là à ce moment-là, ça sera super, sinon je te remercie en tout cas pour toute l'aide apportée.

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Ok
    à+

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/03/2011, 14h16
  2. manipulation des fichier xsl avec vba excel
    Par naim8622 dans le forum Excel
    Réponses: 1
    Dernier message: 23/01/2009, 00h13
  3. utiliser un callback C++ natif avec du code .NET (en C#)
    Par nicolasflasque dans le forum C++/CLI
    Réponses: 3
    Dernier message: 28/11/2008, 11h58
  4. [access 2003] Supprimer un fichier .csv avec du code VBA
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/02/2008, 16h42
  5. Lire un fichier PHP avec du code PHP et l'afficher
    Par Prosis dans le forum Langage
    Réponses: 4
    Dernier message: 10/01/2008, 00h21

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