Bonjour tout le monde,
Je suis entrain de travailler sur la partie mails automatisés d'une application.
Cela consiste à pré-remplir un formulaire à partir de données en base de données, laisser quelques champs éditables, puis à générer un fichier XML listant tous les champs utiles au mail.
Pour plus de souplesse et de d'évolutivité, j'ai pensé utiliser deux transformations XSLT. Je m'explique:
-Exemple de XML généré par le formulaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <racine> <typeMail>Prise de contact</typeMail> <numéroCommande>X8374</numéroCommande> <offre>euh</offre> <emailClient>blabla@blabla</emailClient> <nomContact>toto</nomContact> </racine>
-A partir du XML généré par le formulaire, on crée à l'aide d'un premier fichier xsl un deuxième XML qui représente le mail (je sépare le formulaire du contenu "texte" du mail). Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <email> <emailClient>blabla@blabla</emailClient> <Entete> <titre> Prise de contact<titre> <objet> Bienvenue M. <donneeClient> toto </donneeClient>. Merci d'avoir souscrit à <donneeCommande>euh</donneeCommande> </objet> </Entete> <Corps> Votre numéro de commande est <donneeCommande>X8374</donneeCommande> </Corps> </email>
- A partir de ce XML et à partir d'une deuxieme fiche XSL, on obtient un fichier html qui sera envoyé au Client. Ainsi le style de tous les mails ne sera contenu que dans un seul fichier et on peut le changer aisément.
Ma première question est: Est-ce une bonne façon de résoudre mon problème?
J'ai commencé à tester la faisabilité de la solution mais cela ne fonctionne pas automatiquement.
Code XML de base
Premier XSL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="test.xsl" ?> <persons> <person username="JS1"> <name>John</name> <family-name>Smith</family-name> </person> <person username="MI1"> <name>Morka</name> <family-name>Ismincius</family-name> </person> </persons>
Deuxieme 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="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/persons"> <xsl:processing-instruction name="xml-stylesheet">type="text/xsl" href="test2.xsl"</xsl:processing-instruction> <root> <xsl:apply-templates select="person"/> </root> </xsl:template> <xsl:template match="person"> <name username="{@username}"> <xsl:value-of select="name" /> </name> </xsl:template> </xsl:stylesheet>
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 <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head></head> <body style="font-family:Verdana; font-size:18pt; color:green"> blablabla <xsl:apply-templates /> blablabla </body> </html> </xsl:template> <xsl:template match="name"> <p style="font-family:Verdana; font-size:30pt; color:red"> blibli </p> </xsl:template> </xsl:stylesheet>
Lorsque j'ouvre le premier XML j'obtient bien le XML suivant résultant de la première transformation
et celui ci est bien transformé comme je veux par le deuxieme XSL, mais je suis obligé de le faire manuellement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="UTF-16"?> <?xml-stylesheet type="text/xsl" href="test2.xsl"?> <root> <name username="JS1">John</name> <name username="MI1">Morka</name> </root>
Comment faire en sorte que tout se fasse tout seul sans utiliser de script ou de code supplémentaire? Est ce un problème au niveau des HREF? Peut etre le deuxieme XML est stocké dans un dossier temporaire et du coup ne voit pas le deuxieme XSL?
Merci beaucoup d'avance pour votre aide
Seydou
Partager