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] Requête dans une base de données


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut [XSLT] Requête dans une base de données
    Bonjour,

    J'ai un fichier XML en entrée. J'utilise un méchanisme XSLT pour générer un fichier XSL-FO de manière à pouvoir ensuite générer un PDF avec ApacheFOP.

    J'ai besoin d'ajouter une fonctionnalité supplémentaire : au moment de la transformation XSLT, suivant la valeur d'une de mes données, j'aurais besoin d'aller me connecter à une base de données pour aller récupérer juste une valeur.

    Malgré mes recherches sur Internet, je n'arrive pas à voir quel est l'outil standard pour ce genre de chose.

    J'ai fait des essais, infructueux, avec Saxon. Ce qui me déçoit, c'est que je n'arrive pas à savoir ce qui coince...

    problème sur ma sql:connection ?? sur ma sql:query ?? rien aucune info ... la génération se passe sans soulever de problème, mais là où je devrais avoir ma donnée récupérée dans la base, je n'ai rien ...

    Aucune trace dans les logs Apache non plus ...

    Mon bout de code est exactement similaire à ce qui est décrit ici :
    http://ajwelch.blogspot.com/2007/09/...from-xslt.html

    ... autrement dit, rien d'extraordinaire

    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0"
    	xmlns:xs="http://www.w3.org/2001/XMLSchema"
    	xmlns:sql="/net.sf.saxon.sql.SQLElementFactory">
     
    	<xsl:output method="xml" encoding="utf-8"/>
    	<xsl:param name="driver" select="'oracle.jdbc.driver.OracleDriver'" as="xs:string"/>
    	<xsl:param name="database" select="'jdbc:oracle:thin:@<SERVER>:<BD>'" as="xs:string"/>
     
    	<xsl:param name="user" select="toto" as="xs:string"/>
    	<xsl:param name="password" select="tutu" as="xs:string"/>
     
     
     
    (...)
    	<xsl:choose>
    		<xsl:when (...)
    		</xsl:when>
    		<xsl:otherwise>
    		<xsl:variable name="connection" as="java:java.sql.Connection" xmlns:java="http://saxon.sf.net/java-type">
    		<sql:connect driver="{$driver}" database="{$database}" user="{$user}" password="{$password}"/>
    			<xsl:fallback>
    				<fo:inline font-weight="bold">SQL extensions are not installed</fo:inline>
    			</xsl:fallback>
    		</xsl:variable>
    	<xsl:variable name="resultNico" as="xs:string">
    	<sql:query connection="$connection" 
    		table="ARTICLE" 
    		column="DESIGNATION"
    		where="NUM_ARTICLE='12527'"/>
    	</xsl:variable>
    	<fo:inline font-weight="bold">Des :<xsl:value-of select="$resultNico"/></fo:inline>
    (...)

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut


    Je doute que tu trouves ton bonheur ici.
    Normalement c'est typiquement le type de chose qu'on doit éviter en XSLT , un peu comme de mettre de la programmation spaghetti à base de goto dans un langage style C++ .
    Dans la logique de création du XSLT, il ne devait pas avoir d'accès externe pendant l'exécution, on pouvait récupérer des données ,voir des objets dans le cas de XSLT 2.0 ou du draft XSLT 1.1 en paramètre avant de lancer le traitement, mais pendant....

    En passant , est ce que tu as regardé les commentaires du blog ?

    D'autres ont l'air d'avoir eu des soucis aussi

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Erwy Voir le message


    Je doute que tu trouves ton bonheur ici.
    Normalement c'est typiquement le type de chose qu'on doit éviter en XSLT , un peu comme de mettre de la programmation spaghetti à base de goto dans un langage style C++ .
    (...)
    Tout à fait d'accord, cette solution ne me semble pas propre, mais c'est la seule que je vois pour l'instant.


    Citation Envoyé par Erwy Voir le message
    (...)
    Dans la logique de création du XSLT, il ne devait pas avoir d'accès externe pendant l'exécution, on pouvait récupérer des données ,voir des objets dans le cas de XSLT 2.0 ou du draft XSLT 1.1 en paramètre avant de lancer le traitement, mais pendant....
    (...)
    Là tu m'intéresses fortement. Il y a un truc sur la transformation XSLT que j'ai du zapper : pour moi - et j'espère que tu vas me dire le contraire - il est impossible de fournir des paramètres à une transformation XSLT (XSLT = XML + XSL --> un peu de ce qu'on veut)

    Mon problème de base est celui-là :
    2 situations possibles à partir d'un même fichier XML
    1. je fais ma transformation sans toucher aux données du XML
    2. je fais ma transformation avec ce fichier XML de base, mais dans lequel quelques données ont besoin d'être remplacées. Cependant, j'ai toutes les infos avant la transformation XSL pour pouvoir les fournir en paramètres, en quelques sorte. Par contre, je ne vois pas comment faire.

    Citation Envoyé par Erwy Voir le message
    (...)

    En passant , est ce que tu as regardé les commentaires du blog ?

    D'autres ont l'air d'avoir eu des soucis aussi
    Oui... ça a qq chose de réconfortant de voir qu'on est pas le seul à galérer !

  4. #4
    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 trop le courage de répondre (je suis malade), mais voila un exemple de passage de paramètres au process de XSL-T : http://xml.developpez.com/sources/?p..._javascript_FF
    C'est faisable dans tous les langages.

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Quelques infos en complément du message précédent

    je ne connais malheureusement pas tous les processeurs et je n'ai jamais pu utilisé tous les proc donc ce qui suis est valable pour MSXML le parseur microsoft et celui de Mozilla.
    Il faudrait que je consulte la doc de saxon pour en savoir plus sur ce dernier.

    Tous les procs peuvent prendre des strings ou des nombres en paramètre

    Mozilla et msxml (et sans doute d'autre) peuvent des noeuds d'un autre document sélectionné par le DOM tu navigue dans ces noeuds (et dans leur descendant voir ascendant) comme si c'etait un autre document XML

    MSXML peut prendre des objets en paramètre mais avec de grosse limitations en javascript en tout cas.

    L'objet doit être construit , on ne peut passer un objet dom natif.On ne peut utiliser que des méthodes, impossible d'accéder aux propriétes directement.


    Je pense que SAXON, vu qu'il implémente XSLT 2.0 doit permettre une assez grande diversité de type en paramètre mais je n'en suis pas sûr

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Merci Erwy, merci Morbo,

    J'ai trouvé de la doc pour cette histoire de passage de paramètres. Je vais me renseigner un peu plus.

    Par contre, je dois avouer que pour répondre à mon problème initial, la connexion à la BD dans la XSLT lui même serait bien plus intéressant.

    Si je trouve un truc, je le proposerai, histoire de voir ce que les experts en pensent, et pour aider quelqu'un éventuellement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/06/2010, 18h31
  2. Requête d'insertion dans une base de données
    Par Kalion dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/02/2009, 13h45
  3. [MySQL] Requête mysql qui permet de chercher dans une base de données complète.
    Par your_joker dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/07/2008, 10h28
  4. [MySQL] Enregistrement d'une requête SQL dans une base de données MySQL
    Par glsn dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2008, 13h06
  5. Requête dans une base de données énorme
    Par Nanji dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/06/2006, 12h13

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