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

Servlets/JSP Java Discussion :

Afficher un XML avec un XSLT le mettant en forme dans un JSP


Sujet :

Servlets/JSP Java

  1. #1
    Courgette17
    Invité(e)
    Par défaut Afficher un XML avec un XSLT le mettant en forme dans un JSP
    Bonjour à tous,

    Voici mon problème:
    Je veux afficher un XML et le transformer ensuite avec un XSL.
    Je veux que cela se passe dans une page JSP dans laquelle je passe le fichier XML en paramètre dans la barre d´adresse.

    Voici mon code:

    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
     
    <html>
    <head>
    <jsp:useBean id="database" class="******.DatabaseInteraction" />
    <% String nomdocument = request.getParameter("instance"); 
    String xmlInstance = database.getInstance(nomdocument);
    %>
    <script>
    function loadXMLDoc(fname)
    {
    var xmlDoc;
    // code for IE
    if (window.ActiveXObject)
      {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
      {
      xmlDoc=document.implementation.createDocument("","",null);
      }
    else
      {
      alert('Your browser cannot handle this script');
      }
    xmlDoc.async=false;
    xmlDoc.load(fname);
    return(xmlDoc);
    }
     
    function displayResult()
    {
    xml=loadXMLDoc(xmlInstance);
    xsl=loadXMLDoc("AS5.xsl");
    // code for IE
    if (window.ActiveXObject)
      {
      ex=xml.transformNode(xsl);
      document.getElementById("example").innerHTML=ex;
      }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
      {
      xsltProcessor=new XSLTProcessor();
      xsltProcessor.importStylesheet(xsl);
      resultDocument = xsltProcessor.transformToFragment(xml,document);
      document.getElementById("example").appendChild(resultDocument);
      }
    }
    </script>
    <title>Data Collector</title>
    </head>
    <body id="example" onLoad="displayResult()">
    </body>
    </html>
    Malheureusement le fichier est situé dans une base de données et il faut que je transforme la variable xmlinstance en objet. Sinon le LoadXmlDoc ne le récupère pas correctement et j´ai le droit à tout le XML dans le code source.

    Est-ce qu´il est possible de passer un objet d´un code en JSP à un script JavaScript? Si oui, comment puis je faire?

    Est-ce qu´il existe un code plus simple pour faire la transformation XML/XSLT en JSP?

    Voila tout,

    Merci d´avance,

    Cordialement,

    MadMarc52
    Dernière modification par Courgette17 ; 07/07/2009 à 22h10.

  2. #2
    Courgette17
    Invité(e)
    Par défaut
    Ça n´existe pas dans ce langage?
    Ce n´est pas possible?



    Je ne sais pas je demande.


    Merci d´avance,


    MadMarc52

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Pas le temps de te répondre longuement, mais tu ne devrais pas faire ça en javascript, mieux vaut récupérer ton XML dans une servlet (ou pourquoi pas salement dans ta JSP), en java donc, et le transformer via les librairies javax.xml.jeSaisPlusQuoiTransfmormer.

    Je n'ai plus les noms, des classes qui te serviraient, mais cherche sur le web java + xslt, tu devrais trouver sans problème.

  4. #4
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    En fait il deux options :

    • La première de feignant consiste à retourner le xml avec la directive de traitement: <?xml-stylesheet type="text/xsl" href="transform.xsl"?>. Celle-ci donne instruction au navigateur d'appliquer la feuille de style avant présentation. Mais attention, en inspectant le code source, on dévoile le document xml avant transformation;
    • La seconde c'est comme te l'a suggéré mixouille de réaliser la transformation côté serveur. Voir http://java.developpez.com/faq/xml/?...lt#creerXmlDom

  5. #5
    Courgette17
    Invité(e)
    Par défaut
    Merci pour vos réponses.

    Tommy31, aurais tu un exemple complet concernant la solution feignante?
    Le fait que le nom du fichier xml soit visible ne me dérange pas vu qu´il sera de toute façon dans la barre d´adresses.

  6. #6
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par MadMarc52 Voir le message
    Merci pour vos réponses.
    Le fait que le nom du fichier xml soit visible ne me dérange pas vu qu´il sera de toute façon dans la barre d´adresses.
    C'est pas le nom qui est visible, mais son contenu.
    Pour l'exemple, tu rajoute la ligne suivante dans xml retourné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="transform.xsl"?>
    Bien entendu, ta feuille de style (transform.xsl, tu la nomme comme tu veux) doit être accessible (ie servie par ton serveur).

  7. #7
    Courgette17
    Invité(e)
    Par défaut
    Citation Envoyé par Tommy31 Voir le message
    C'est pas le nom qui est visible, mais son contenu.
    Pour l'exemple, tu rajoute la ligne suivante dans xml retourné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="transform.xsl"?>
    Bien entendu, ta feuille de style (transform.xsl, tu la nomme comme tu veux) doit être accessible (ie servie par ton serveur).
    Ah nan mais ça je sais transformer un XML simple en XSLT, l´ennui c´est que je suis obligé de passer par un jsp qui aura comme paramètre dans la barre d´adresses le XML.
    C´est ensuite par le paramètre que je récupérerais le bon XML dans la base de données.

    De toute façon je ne peux pas changer chacun des XML car ils sont générés automatiquement par mon outil.

  8. #8
    Courgette17
    Invité(e)
    Par défaut
    Citation Envoyé par Tommy31 Voir le message
    C'est pas le nom qui est visible, mais son contenu.
    Pour l'exemple, tu rajoute la ligne suivante dans xml retourné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="transform.xsl"?>
    Bien entendu, ta feuille de style (transform.xsl, tu la nomme comme tu veux) doit être accessible (ie servie par ton serveur).
    Le contenu visible ne me dérange pas non plus vu que c´est le but de ma page, sauf que ce sera un peu mis en forme.

    Dans les exemples proposés sur cette page: http://java.developpez.com/faq/xml/?...lt#creerXmlDom , dans le cas de : "Comment créer ou modifier un fichier XML avec DOM et XSLT ?"

    Je ne vois pas comment l´adapter à mon cas.
    Document correspond au fichier XML
    String Fichier au fichier XSL c´est bien ça?

  9. #9
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par MadMarc52 Voir le message
    Document correspond au fichier XML
    String Fichier au fichier XSL c´est bien ça?
    oui.

  10. #10
    Courgette17
    Invité(e)
    Par défaut
    Voici mon nouveau code:

    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
    <%@ page import="javax.xml.parsers.*"
    	import="org.w3c.dom.*"
    	import="org.xml.sax.*" 
    	import="javax.xml.transform.*"
    	import="javax.xml.transform.dom.*"
    	import="javax.xml.transform.stream.*"
    	import="java.io.*"
    %>
    <html>
    <head>
    <jsp:useBean id="database" class="***********.DatabaseInteraction" />
    <% 
    String nomdocument = request.getParameter("instance"); 
    String xmlInstance = database.getInstance(nomdocument);
    String fichier = "AS5.xsl";
     
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new InputSource(new StringReader(xmlInstance)));
     
                    // Création de la source DOM
                    Source source = new DOMSource(document);
                    
                    // Création du fichier de sortie
                    File file = new File(fichier);
                    Result resultat = new StreamResult(fichier);
                    
                    // Configuration du transformer
                    TransformerFactory fabrique = TransformerFactory.newInstance();
                    Transformer transformer = fabrique.newTransformer();
                    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                    transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
                    
                    // Transformation
                    transformer.transform(source, resultat);
    %>
     
    <title>Data Collector</title>
    </head>
     
    </body>
    </html>
    Mais je n´obtiens qu´une page blanche sous IE et FireFox. J´ai raté quelque chose?

    Merci d´avance.

  11. #11
    Courgette17
    Invité(e)
    Par défaut
    Personne ne sait?
    Même un exemple complètement différent où je mets juste le chemin du XSLT et le String du XML me conviendrait.

  12. #12
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Il te manque des trucs dans ton code, il te faut 3 streams :
    • un stream d'entrée correspondant au fichier xml à transformer
    • un stream d'entrée correspondant au fichier xslt de transformation
    • un stream de sortie correspondant au résultat de la transformation.


    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
     
    javax.xml.transform.Source xmlSource =
                    new javax.xml.transform.stream.StreamSource(xmlFile);
            javax.xml.transform.Source xsltSource =
                    new javax.xml.transform.stream.StreamSource(xsltFile);
            javax.xml.transform.Result result =
                    new javax.xml.transform.stream.StreamResult(responseOutput);
     
            // create an instance of TransformerFactory
            javax.xml.transform.TransformerFactory transFact =
                    javax.xml.transform.TransformerFactory.newInstance(  );
     
            javax.xml.transform.Transformer trans =
                    transFact.newTransformer(xsltSource);
     
            trans.transform(xmlSource, result);
    Le principe étant de générer la sortie dans la réponse http, ou alors de stocker le résultat dans un fichier temporaire et de procéder à une redirection sur celui-ci.

  13. #13
    Courgette17
    Invité(e)
    Par défaut
    J'ai réussi!

    Voila le code pour ceux qui auront des éventuels problèmes semblables au mien.

    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
     
    <%@ page import="javax.servlet.http.HttpServlet"
    	        import="java.io.InputStream"
    		import="java.io.ByteArrayInputStream"
    		import="java.lang.Exception"
    %>
    <jsp:useBean id="database" class="******.bean.DatabaseInteraction" />
    <% 
    String nomdocument = request.getParameter("instance"); 
    String xmlContent = database.getInstance(nomdocument);
     
    String FS = System.getProperty("file.separator"); 
     
        // Set content type for HTML.
        response.setContentType("text/html; charset=UTF-8");    
        try
        {   
          javax.xml.transform.TransformerFactory tFactory = 
                    javax.xml.transform.TransformerFactory.newInstance();
          //get the real path for xml and xsl files.
          String ctx = getServletContext().getRealPath("") + FS;        
          // Get the XML input document and the stylesheet, both in the servlet
          // engine document directory.
              
              InputStream xmlIn = new ByteArrayInputStream(xmlContent.getBytes("UTF-8"));
             
          javax.xml.transform.Source xmlSource = 
                    new javax.xml.transform.stream.StreamSource(xmlIn);
          javax.xml.transform.Source xslSource = 
                    new javax.xml.transform.stream.StreamSource
                                 (new java.net.URL("file", "", ctx+"AS5.xsl").openStream());
          // Generate the transformer.
          javax.xml.transform.Transformer transformer = 
                                 tFactory.newTransformer(xslSource);
          // Perform the transformation, sending the output to the response.
          transformer.transform(xmlSource, 
                               new javax.xml.transform.stream.StreamResult(out));
        }
        // If an Exception occurs, return the error to the client.
        catch (Exception e)
        {
          out.write(e.getMessage());
     
        }
        // Close the PrintWriter.
        out.close();
     
    %>
    Merci à tous!

    Cordialement,

    MadMarc52

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/07/2011, 13h57
  2. Fichier XML avec groupes et sa mise en forme XSL
    Par Pingva dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 08/07/2011, 16h57
  3. Afficher du XML avec XSL (AJAX)
    Par mazflo007 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/04/2010, 17h03
  4. [XSLT] Liaison implicite d'un XML avec son XSLT
    Par jamulion dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/09/2006, 10h08
  5. Afficher du XML avec du HTML
    Par BipBip2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 05/04/2005, 10h45

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