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

Delphi .NET Discussion :

Comment créer un .html en delphi.NET à partir d'un XML et XSL?


Sujet :

Delphi .NET

  1. #1
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut Comment créer un .html en delphi.NET à partir d'un XML et XSL?
    Bonjour....

    Je développe sous delphi 2006 dans un projet VCL et je souhaite créer une partie de programme qui me permette à partir d'une feuille de style (.XSL) et d'un document XML de générer un .Html qui n'aura donc plus de dépendance avec le XML et le XSL.

    Est possible et si oui comment dois-je m'y prendre?

    Merci d'avance...

    Ps: je débute alors si vous avez des liens vers des exemples n'hésitez pas .
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Oui c'est possible !
    Code XML :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <NewDataSet>
    <Client>
    <Nom>Faivre</Nom>
    <Prenom>Denise</Prenom>
    </Client>
    <Client>
    <Nom>Dupond</Nom>
    <Prenom>Pierre</Prenom>
    </Client>
    <Client>
    <Nom>Barrot</Nom>
    <Prenom>Robert</Prenom>
    </Client>
    </NewDataSet>
    Code 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>">
      <xsl:output omit-xml-declaration="yes" indent="yes" encoding="iso-8859-1"/>
      <xsl:template match="/">
        <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#e3e9f8">
          <tr>
            <td>
              <img src="..\images\cale.gif" height="10" width="1"/>
            </td>
          </tr>
          <tr>
            <td class="titre">CLIENTS</td>
          </tr>
          <tr>
            <td>
              <img src="..\images\cale.gif" height="10" width="1"/>
            </td>
          </tr>
        </table>
        <br/>
        <br/>
        <table align="center" border="0" cellspacing="0" cellpadding="0" bgcolor="#d9dfea">
          <xsl:for-each select="NewDataSet/Client">
            <tr bgcolor="#d9dfea">
              <xsl:if test="position() mod 2 = 0">
                <xsl:attribute name="bgcolor">#e7ebf1</xsl:attribute>
              </xsl:if>
              <td>
                <img src="images\cale.gif" width="5" height="1"/>
              </td>
              <td>
                <input type="checkbox" name="ch{(NUMFICHE)}" value="{(NUMFICHE)}"/>
              </td>
              <td>
                <img src="images\cale.gif" width="10" height="1"/>
              </td>
              <td>
                <xsl:value-of select="Nom"/>
              </td>
              <td>
                <img src="images\cale.gif" width="15" height="1"/>
              </td>
              <td>--</td>
              <td>
                <img src="images\cale.gif" width="15" height="1"/>
              </td>
              <td>
                <xsl:value-of select="Prenom"/>
              </td>
              <td>
                <img src="images\cale.gif" width="15" height="1"/>
              </td>
              <td>--</td>
            </tr>
          </xsl:for-each>
        </table>
        <br/>
        <br/>
        <table border="0" cellspacing="0" cellpadding="0" width="100%">
          <tr align="center">
            <td>
              <input type="submit" name="Button1" value="élément" id="Button2" />
              <input class="btn" type="button" value="retour" name="retour" onclick="history.back()"/>
            </td>
          </tr>
        </table>
      </xsl:template>
    </xsl:stylesheet>
    Code DELPHI
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    unit Unit2;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    implementation
    uses XSLProd, XMLDoc, XMLDOM;
    {$R *.dfm}
    function FusionXMLXSL (st1, st2 : string) : string  ;
    var
      XMLDocument1 : TXMLDocument;
      XSLPageProducer1: TXSLPageProducer;
    begin
      Result := '' ;
      try
        XMLDocument1 := TXMLDocument.Create(Application) ;
        XMLDocument1.DOMVendor := DOMVendors.Find ('MSXML') ;
        XSLPageProducer1 := TXSLPageProducer.Create(Application);
        XSLPageProducer1.DOMVendor := DOMVendors.Find ('MSXML') ;
        XMLDocument1.LoadFromXML(st1) ;
        XSLPageProducer1.XMLData :=  XMLDocument1 ;
        XSLPageProducer1.XML.text := st2 ;
        Result := XSLPageProducer1.Content ; // ;FromString (sl2.Text) ;
      finally
        if (XMLDocument1 <> Nil) then XMLDocument1.Free;
        if (XSLPageProducer1 <> Nil) then XSLPageProducer1.Free;
      end;
    end ;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl1,sl2 : TStringList ;
    begin
      sl1 :=  TStringList.create ;
      sl1.LoadFromFile('aa1.xml');
      sl2 :=  TStringList.create ;
      sl2.LoadFromFile('aa1.xsl');
      Memo1.lines.Text := FusionXMLXSL (sl1.Text,sl2.Text) ;
      sl1.Free ;
      sl2.Free ;
    end;
     
    end.

  3. #3
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    slt alweber

    As tu essayé ton code??

    Moi je viens de l'essayer et ca ne marche pas il m'affiche dans le Memo le contenu de mon XSL...

    Mais en meme temps je suis étonné de ne pas voir dans ce code de déclaration de mon HTML. A aucun moment je vois sous quel non je vais stoker mon HTML...

    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  4. #4
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    C'est bien une fusion xml-xsl. Voici deux fichiers autres fichiers xml xsl.
    Quand tu l'auras testé je pourrai te donner plus d'infos sur l'utilisation que j'en fait.

    A bientôt
    XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <element>
      <vehicule type="Vélo"/>
      <vehicule type="Mobylette"/>
      <vehicule type="Moto"/>
    </element>
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>">
      <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
      <xsl:template match="/">
        <html>
          <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
          </head>
          <body>
            <xsl:for-each select="element/vehicule ">
              <p>
                <xsl:value-of select="@type"/>
              </p>
            </xsl:for-each>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>

  5. #5
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    En fait en examinant de plus pret le résultat le code que tu m'as donné permet bien de parser du XML avec mon XSL mais le résultat obtenu n'est pas un .HTML mais une sorte de copie de mon XSL ou tout les "xsl value of select" sont interprété.En revanche toute les balise HTML ne sont pas interprété.

    Exemple:

    Soit le XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <Livres>
         <livre1>Comprendre XSLT</livre1> 
         <livre2>Le C facile</livre2>
         <livre3>Le pascal pour les nuls</livre3>
     </Livres>
    Soit le 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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>">
      <xsl:output omit-xml-declaration="yes" indent="yes" encoding="iso-8859-1"/>
      <xsl:template match="/">
        <table>
          <tr>
             <td>Livre1</td>
             <td><xsl:value-of select="livre1"/></td>
          </tr> 
          <tr>
             <td>Livre2</td>
             <td><xsl:value-of select="livre2"/></td>
          </tr> 
          <tr>
             <td>Livre1</td>
             <td><xsl:value-of select="livre3"/></td>
          </tr>
    Et j'obtiens avec le programme dans le mémo:

    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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>">
      <xsl:output omit-xml-declaration="yes" indent="yes" encoding="iso-8859-1"/>
      <xsl:template match="/">
        <table>
          <tr>
             <td>Livre1</td>
             <td>Comprendre XSLT</td>
          </tr> 
          <tr>
             <td>Livre2</td>
             <td>Le C facile</td>
          </tr> 
          <tr>
             <td>Livre1</td>
             <td><Le Pascal pour les nuls></td>
          </tr>
    Et à quel moment on stipule le nom du fichier HTML résultat de la transformation???

    Je comprend pas du tout...
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  6. #6
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Tes deux fichiers devarit avoir le contenu suivant pour produire le résultat que tu souhaites
    XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Livres>
      <livre>Comprendre XSLT</livre>
      <livre>Le C facile</livre>
      <livre>Le pascal pour les nuls</livre>
    </Livres>
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>">
      <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
      <xsl:template match="/">
        <html>
          <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
          </head>
          <body>
            <table>
              <xsl:for-each select="Livres/livre">
                <tr>
                  <td>livre
                    <xsl:value-of select="position()"/>
                  </td>
                  <td>
                    <xsl:value-of select="."/>
                  </td>
                </tr>
              </xsl:for-each>
            </table>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>

  7. #7
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    Mais meme avec des déclarations identiques aux tiennes dans mon XML et XSL ca ne marche pas et d'ailleurs je viens d'essayer avec un copier coller du XML et du XSL que tu m'as donné et ca marche pas non plus....

    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  8. #8
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Peux tu mettre en réponse le résultat obtenu ?

  9. #9
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Petite note supplémentaire : certains systèmes de fusion XML/XSL nécessitent l'installation du lot "msxml.msi" téléchargeable gratuitement depuis le site microsoft.

  10. #10
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    Avec ton XML et on XSL (et ton programme bien sur ) on a dans le mémo:

    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
     
      <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <table>
    <tr>
    <td>livre1</td>
    <td>Comprendre XSLT</td>
    </tr>
    <tr>
    <td>livre2</td>
    <td>Le C facile</td>
    </tr>
    <tr>
    <td>livre3</td>
    <td>Le pascal pour les nuls</td>
    </tr>
    </table>
    </body>
    </html>
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  11. #11
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Et en d'autres termes tu voudrais pouvoir afficher directement ce résultat dans un TWebBrowser ?

  12. #12
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    En fait, je voudrais simplement que suite à l'exécution du programme je me retrouve dans le "c:" par exemple avec un fichier HTML résultat de la transformation XSLT de mon XML avec mon XSL...
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  13. #13
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    tu peux modifier le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl1,sl2 : TStringList ;
    begin
      sl1 :=  TStringList.create ;
      sl1.LoadFromFile('aa1.xml');
      sl2 :=  TStringList.create ;
      sl2.LoadFromFile('aa1.xsl');
      Memo1.lines.Text := FusionXMLXSL (sl1.Text,sl2.Text) ;
      Memo1.lines.SaveToFile ('mafiche.htm') ;
      sl1.Free ;
      sl2.Free ;
    end;

  14. #14
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    CA MARCHE

    Merci beaucoup pour ton aide ALWEBER.

    Avec un peu de recul le résultat obtenu avec le mémo n'etait pas étonnant puisqu'il n'est pas capable d'interpreter le langage HTML .

    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

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

Discussions similaires

  1. Comment créer un HTML Ebook par Delphi?
    Par mohamed.dz dans le forum Web & réseau
    Réponses: 4
    Dernier message: 15/10/2007, 21h07
  2. Comment créer un exe de VB.NET ?
    Par salrouge dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/05/2007, 06h52
  3. Comment créer un paquet dans Delphi 7
    Par binome1 dans le forum Delphi
    Réponses: 1
    Dernier message: 02/12/2006, 12h04
  4. Comment créer un calendrier sous vb.net
    Par Clim44 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/06/2006, 15h22
  5. Réponses: 0
    Dernier message: 11/05/2006, 08h19

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