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

Bases de données Delphi Discussion :

[XSL-DELPHI] Peu orthodoxe... Mais ça marche : )


Sujet :

Bases de données Delphi

  1. #1
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 141
    Points : 2 189
    Points
    2 189
    Billets dans le blog
    3
    Par défaut [XSL-DELPHI] Peu orthodoxe... Mais ça marche : )
    Bonjour,

    J'ai besoin d'effectuer des requêtes sur un fichier XML, avec des tris...etc.
    J'ai donc utilisé un fichier XSL.

    Cependant, dans Delphi je n'ai pas trouvé le moyen d'accéder à cet XSL pour changer la valeur de ma requête.

    Alors j'ai fait un truc pas clair mais qui fonctionne :

    A l'endroit de ma requête j'ai enlevé par exemple le paramètre Nom['Dupont'] et je l'ai remplacé par Nom[<NomDelphi>].

    Ensuite dans mon prog Delphi j'ai accédé au fichier avec TFile et stocké dans un TStringList. Ensuite j'ai modifié le XSL en fonction du Nom que j'avais (pour notre exemple, parce qu'en réalité c'est plus compliqué) avec la fonction StringReplace.

    Qu'en pensez-vous ? Y avait il plus simple ? Est-ce vraiment de la folie de faire un truc pareil ? : )

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Pourquoi pas modifier le XSL avant d'appliquer la transformation, mais la question à se poser est : est-il vraiment nécessaire d'effectuer une transformation XSL ?
    Pour tes requêtes, essaie de voir si une requête XPath ne suffit pas.
    Pour un tri, soit il y a la transfo XSL comme tu le fais, soit tu fais un mapping XML => ClientDataSet, et tu appliques le tri au niveau du ClientDataSet.

    Sylvain

  3. #3
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 141
    Points : 2 189
    Points
    2 189
    Billets dans le blog
    3
    Par défaut
    Salut,

    Tout d'abord merci pour ton tutoriel XML-DELPHI qui est excellent. Ca m'a énormément servi.

    Alors pour répondre à ta question sur mon XSL :
    Oui il me le faut. J'essaye de faire une petite appli avec le moins de composant possible et surtout sans composant de base de données. Donc je me sers de l'aperçu avant impression d'internet explorer pour visualiser le compte rendu d'une requête faite sur mon XML. Voila pourquoi je dois garder mon XSL qui fait du HTML.

    Ensuite, au niveau de la requête j'utilise ton tutorial. Mais le problème est que l'expert de liaison XML de Delphi ne génère pas de fonction pour trier une visualisation. Donc c'est surtout le tri qui me pose problème. Et je voudrais que l'utilisateur puisse choisir un tri ascendant ou descendant sur la colonne de son choix.

    En tous les cas ta réponse m'éclaire un peu sur ma façon de programmer.
    Tu penses donc que ce n'est pas complètement stupide ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Non ce n'est pas stupide, mais des pro-XSLT te diront qu'au lieu de modifier ton fichier XSL à la volée, il serait préférable de générer un fichier XSL intermédiaire à partir d'un fichier XML initial contenant les paramètres variables. Ca se discute.

    Non maintenant que je comprends mieux ce que tu veux faire, regarde l'outil Mappeur XML (menu outil D6 entreprise).
    Il permet de mapper un fichier XML vers un ClientDataSet. Une fois les données transférées dans un clientdataset, ce dernier permet d'appliquer les filtres qu'on souhaite.

    Autre solution, plus technique mais efficace : consiste à faire le boulot du mappeur XML mais directement en appliqunt une transformation XSLT sur les données sources pour obtenir un paquet XML collant à la grammaire du clientdataset (lorsqu'on sauvegarde les données au format XML : cds.savetofile(nomfichier, dfXML) )

    Sylvain

  5. #5
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 141
    Points : 2 189
    Points
    2 189
    Billets dans le blog
    3
    Par défaut
    Bah voila, tout le problème est la.
    Bien sur j'avais pensé au clientdataset. Mais le problème est que le mappeur xml de Delphi me génère un fichier xml tout bizarre... Avec des lignes "Datapacket" et pleins d'autres trucs.
    Du coup, lorsque je lance mon fichier XML basé mon modèle XSL ca fonctionne pas. La visualisation est impossible.

    Par contre la seconde solution, ou "on fait le boulot" du mappeur.. La par contre j'ai pas essayé, je comprends pas ce que tu veux dire.

    pour faire : cds.savetofile(nomfichier, dfXML)
    Il faut bien que des données soient chargées dans le cds en question ?
    Donc on en revient au problème ci-dessus, ca me fait un fichier non valide pour mon XSL.

  6. #6
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 141
    Points : 2 189
    Points
    2 189
    Billets dans le blog
    3
    Par défaut
    Ca y est j'ai trouvé comment faire !
    Merci beaucoup car tu m'as énormément aidé.

    En fait, je n'étais pas foutu d'arriver à configurer correctement mon clientdataset et mon XMLTransformprovider !

    Donc le XMLtransformprovider à un XMLDataFile qui correspond à mon XML "propre"
    Le client Dataset à ce fameux XML avec les DATAPACKET et tout le reste. Enfin le clientdataset à sa propriété providername qui correspond à mon XMLTransformprovider.

    Et la j'ai mis en application ton : cds1.savetofile après une mise à jour de mon TXMLDocument... Tout se synchronise et correspond. C'est vraiment génial.

    Merci pour ton aide précieuse.

    A++

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Tant mieux .
    Tu peux charger toi même un clientdataset avec des données XML si tu le souhaites avec LoadFromFile ou la propriété XMLData.
    Ceci dit la soluce avec le transform provider est utile et efficace pour maintenir un schéma de données.

    Sylvain

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

Discussions similaires

  1. simple Script, mais ca marche pas
    Par super_dz dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 11/09/2007, 13h00
  2. Clé wifi sagem et livebox mais sa marche pas
    Par -Pug- dans le forum Dépannage et Assistance
    Réponses: 5
    Dernier message: 22/12/2006, 15h56
  3. Réponses: 8
    Dernier message: 03/10/2006, 17h34

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