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

XSL/XSLT/XPATH XML Discussion :

Ne pas utiliser ActiveX pour afficher le résultat d'une transformation XSLT dans Internet Explorer


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Ne pas utiliser ActiveX pour afficher le résultat d'une transformation XSLT dans Internet Explorer
    Bonjour,

    Je débute et j'ai trouvé un code qui fonctionne bien pour associer en externe (dans un fichier HTML) un fichier XML et XSL et permettre ainsi la visualisation du résultat aussi bien dans IE que dans les autres navigateurs.

    Néanmoins, la méthode utilisée pour IE avec des contrôles ActiveX n'est pas très pratique pour l'utilisateur qui doit modifier le paramétrage de son navigateur et diminuer ainsi la sécurité.

    J'ai trouvé deux articles et exemples de code qui permettent de se passer des contrôles ActiveX mais j'ai du mal à l'intégrer dans mon code initial (faute d'expérience probablement )

    Qui pourrait m'aider à modifier mon code pour que cela fonctionne dans IE sans utiliser les contrôles ActiveX ?

    Voici le code initial (complet) :

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
        <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
        <title>Visualisation</title>
        <script>
    function loadXMLDoc(filename)
    {
    if (window.ActiveXObject)
      {
      xhttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
    else 
      {
      xhttp = new XMLHttpRequest();
      }
    xhttp.open("GET", filename, false);
    try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
    xhttp.send("");
    return xhttp.responseXML;
    }
    function displayResult()
    {
    xml = loadXMLDoc("Flux.xml");
    xsl = loadXMLDoc("XSLT.xsl");
    // code pour IE
    if (window.ActiveXObject || xhttp.responseType == "msxml-document")
      {
      ex = xml.transformNode(xsl);
      document.getElementById("contenu").innerHTML = ex;
      }
    // code pour Chrome, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
      {
      xsltProcessor = new XSLTProcessor();
      xsltProcessor.importStylesheet(xsl);
      resultDocument = xsltProcessor.transformToFragment(xml, document);
      document.getElementById("contenu").appendChild(resultDocument);
      }
    }
    </script> </head>
      <body onload="displayResult()">
        <div id="contenu"> </div>
     
      </body>
    </html>
    Et le bout de code à adapter pour éviter les contrôles ActiveX pour IE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var xml = document.createElement("xml");
    xml.src = "data.xml";
    document.body.appendChild(xml);
    var xmlDocument = xml.XMLDocument;
    document.body.removeChild(xml);
    Autre variante trouvée sur Internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function parseWitoutActiveX(str){
    var doc= null;
    var xmlIsland = document.createElement('xml');
    if(xmlIsland){
    xmlIsland.setAttribute('id','xmlActiveXGetRid');
    xmlIsland.innerHTML = str;
    document.body.appendChild(xmlIsland);
    var doc  = xmlIsland.XMLDocument;
    document.body.removeChild(xmlIsland);
    return  doc;
    }
    Et voici les liens correspondants avec les explications (qui pour moi ne sont pas suffisantes... ) :

    http://http://dean.edwards.name/weblog/2006/04/easy-xml/

    http://www.codeproject.com/Tips/5877...and-Making-the

    Merci par avance pour votre aide !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Je vois pas où tu es allé chercher que ces exemples allaient faire une transformation XSLT. il chargent le fichier XML et il y a pas de XSLT dans cette histoire.

    Une solution serait de ne pas essayer de faire ça en JavaScript. À la place d'une URL vers une page HTML, tu donnes une URL vers le fichier XML directement.
    Et pour qu'il soit affiché selon la feuille de style XSLT, tu y ajoutes l'instruction <?xml-stylesheet type="text/xsl" href="XSLT.xsl" ?>. C'est alors le navigateur qui se charge de faire la transformation et de l'afficher, au lieu de faire ça dans du JavaScript.
    Bien sûr les vieux navigateurs ne savent pas le faire, mais ils ne savaient pas non plus le faire en JavaScript, et IE ne pouvait le faire qu'en ActiveX.

    Autre solution, la plus classique : faire faire ça par le serveur et pas par le navigateur. Comme ça IE ou autre chose, on s'en tape.

    Enfin, solution la plus flexible mais la plus rude : utiliser un moteur XSLT en JavaScript. Chrome et Firefox en fournissent un, pour IE il va falloir aller le chercher. On en trouve, payants, sur Internet. Ou tu peux embaucher un überexpert JavaScript et XML pour qu'il en programme un lui-même

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci thelvin pour ta réponse.

    Comme je l'ai annoncé, je ne suis pas un pro du sujet...

    En fait, je récupère en local des flux XML générés à la volée par un logiciel de compta et je dois les traiter automatiquement d'où la difficulté d'utiliser directement le flux XML avec l'instruction vers la feuille de style XSLT car il faudrait alors que je la rajoute aussi directement à la volée. C'est pour cela que je me suis tourné vers du code JavaScript et cela marche plutôt bien avec Firefox.

    En ce qui concerne la solution côté serveur, c'est quand même bête de faire tourner un serveur en local uniquement pour cette manipulation...

    Enfin la dernière solution que tu proposes (le moteur XSLT pour IE) et que tu qualifies toi-même de "rude" me semble également disproportionnée par rapport à mes besoins !

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Ben, dis que ça marche pas avec IE, alors.

    Tu voulais des pistes, tu les as eues. IE n'inclut pas de moteur XSLT qui fonctionne sans conf', et tu as déjà énormément de chance que Firefox et Chrome acceptent de faire ça sans que les fichiers soient sur un serveur. C'est pourtant limite sur le plan sécurité.

Discussions similaires

  1. [MySQL] Problème pour afficher le résultat d'une procédure stockée sous forme de table html
    Par Baleze dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/12/2012, 17h15
  2. Réponses: 3
    Dernier message: 08/10/2012, 12h17
  3. Réponses: 2
    Dernier message: 19/07/2011, 14h57
  4. Commande SQL pour afficher les résultats d'une lettre
    Par floctc dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/04/2009, 12h37
  5. Affiche d'un message pour afficher le résultat d'une commande
    Par celcy dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/01/2007, 20h59

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