Bonjour à tous!
Je viens vers vous car je rencontre un problème pour appliquer un XSLT sur un XML que je génère avec SAX à partir d'une base de données (MySQL).
Mon projet est une application web sur Tomcat, je renvoi donc le résultat de la conversion [Base de données --> XML] sur le PrintWriter du HttpServletResponse.
Voila comment je génère le XML :
Quand je ne définis pas la variable "xslt" mon XML est renvoyé correctement.
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 StreamResult streamResult = new StreamResult(writer); SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); if(xslt != null) { Templates templates = tf.newTemplates(new StreamSource( new File(xslt))); hd = tf.newTransformerHandler(templates); } else hd = tf.newTransformerHandler(); Transformer serializer = hd.getTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); if(dtd != null) serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dtd); atts = new AttributesImpl(); hd.setResult(streamResult); hd.startDocument(); this.generateNode(); //Je crée dans cette méthode les différents éléments de mon XML hd.endDocument();
Quand je définis cette variable avec le path de mon fichier xsl, la définition du xslt est suivie (dans le <xsl:template match="/">) jusque au moment ou <xsl:apply-templates /> est appelé.
Pour mieux comprendre voici un exemple du xml :
Et du XSLT :
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<films> <film> <film_film_id>1</film_film_id> <film_title>ACADEMY DINOSAUR</film_title> <actors> <actor> <actor_first_name>PENELOPE</actor_first_name> <actor_last_name>GUINESS</actor_last_name> </actor> ... </actors> </film> ... </films>
Le template match="film" n'est jamais appelé, et ça me donne un résultat comme celui-ci :
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/"> <html> <head> <title>Test</title> </head> <body> <span style="color:red;">Coucou</span> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="film"> <p>TOTO</p> </xsl:template> </xsl:stylesheet>
Le problème vient vraiment du code java car j'ai testé le xslt sur le xml sans passer par le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test</title> </head> <body> <span style="color:red;">Coucou</span>1ACADEMY DINOSAUR2006-01-0186A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies1PENELOPEGUINESS1CHRISTIANGABLE1LUCILLETRACY1SANDRAPECK ............. </body> </html>
J'espere que mes explications sont compréhensibles!
Si quelqu'un peut m'aider car je deviens complètement fou ! ^^
Merci d'avance!
Partager