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 :

Visualiser le contenu de fichier XML, sans utiliser la feuille de style XSl, qui y est nommée


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 107
    Points : 72
    Points
    72
    Par défaut Visualiser le contenu de fichier XML, sans utiliser la feuille de style XSl, qui y est nommée
    Bonjour

    Je rencontre un problème avec pages XML utilisant des feuilles de style XSL.

    J'utilise des webservices qui me renvoient des pages xml.
    Jusqu'à présent, je passe par des fonctions ajax pour charger le xml, puis le xsl et enfin fusionner les 2.


    Code Actuel :

    La page XML est générée dynamiquement.

    Code JavaScript : 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
     
     
    function RecupereAlerte(Qui,Login)
    {
    var url="../../Web_Services/webs_Alerte.php?CODEUT=" + Qui + "&LOG=" + Login + "&DIV=idDIVAlerte";
    ajax(url, null , Alerte_Resultat , true , false , null);
    }
     
    function Alerte_Resultat(nodeXML)
    {
    ajax('../../Web_Services/webs_Alerte.xsl', null , FusionTableAlerte, true , false , nodeXML);
    }
     
    function FusionTableAlerteMemePage(NodeXSL,NodeXML)
    {
    var LeDiv = NodeXML.getElementsByTagName('zonediv').item(0).childNodes[0].data;
    var LeNbAlert = NodeXML.getElementsByTagName('nbalert').item(0).childNodes[0].data;
     
    FusionXSLXML(LeDiv,NodeXSL,NodeXML);
    …
     
    }
     
    function FusionXSLXML(Zone,NodeXSL,NodeXML)
    {
    //il faut maintenant fusionner
     
    if( window.ActiveXObject)
    {
          xhtml = NodeXML.transformNode( NodeXSL);
          //alert(xhtml);
          //if(document.getElementById(Zone)) alert ('div ' + Zone + ' existe'); else alert ('di ' + Zone + ' n existe pas !!');
          if(document.getElementById(Zone)) document.getElementById(Zone).innerHTML = xhtml;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if( document.implementation && document.implementation.createDocument)
    {
          xsltProcessor = new XSLTProcessor();
          xsltProcessor.importStylesheet( NodeXSL);
          xhtml = xsltProcessor.transformToFragment( NodeXML, document);
          if(document.getElementById(Zone)) {
                document.getElementById(Zone).innerHTML = "";
                document.getElementById(Zone).appendChild( xhtml);
          } 
    }      //il faut maintenant fusionner

    Mais le passage avec le navigateur IE11 (augmentation de la sécurité) m'empêche de garder le même fonctionnement.
    ActiveXObject refusé.
    dec ce fait, je ne peux plus faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhtml = NodeXML.transformNode( NodeXSL);
    J'ai vu qu'il était possible d'intégrer directement la feuille de style xsl dans le fichier xml avec la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml-stylesheet type="text/xsl" href="webs_Alerte.xsl"?>
    .

    Cela fonctionne bien.

    Mais, cela me pose 2 problèmes.

    1- Comment puis-je encore visualiser le retour xml sans utilisation de la feuille XSl, qui y est mentionnée ?
    Cela est utile si on n'est pas sûr de la bonne stucture du XML retourné ou de son contenu, ou s'il est correct mais que c'est la feuille de style xsl, posant problème, qui bloque l'affichage.

    2- Mon nouveau code donne ceci, mais j'ai du tricher pour afficher le résultat:
    Code JavaScript : 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
     
     
    function RecupereAlerte(Qui,Login)
    {
    var url="../../Web_Services/webs_Alerte.php?CODEUT=" + Qui + "&LOG=" + Login + "&DIV=idDIVAlerte";
    var urlxsl="../../Web_Services/webs_Alerte.xsl";
     
    postHTML(url, urlxsl, "Meme","idDIVAlerte"); 
    }
     
    //Chargement des fichiers XML et XSL pour les navigateurs Firefox Chrome Opera ... 
    function loadXML(xmlPath) 
    { 
       var xmlhttp = new window.XMLHttpRequest(); 
       xmlhttp.open("GET", xmlPath, false); 
       xmlhttp.send(null); 
       var xmlDoc = xmlhttp.responseXML.documentElement; 
       return xmlDoc; 
    } 
     
    // Generation du rendu 
    function postHTML(xmlPath, xslPath, page, elementId) 
    { 
        //if (document.implementation && document.implementation.createDocument) 
        //if( !(window.ActiveXObject))
        if(1==0)
        { 
          // script pour tous les navigateurs Firefox Opera ... 
          var xslDocument = loadXML(xslPath); 
          var xmlDocument = loadXML(xmlPath); 
     
          var xsltProcessor=new XSLTProcessor(); 
          xsltProcessor.importStylesheet(xslDocument); 
          var htmlCode = xsltProcessor.transformToFragment(xmlDocument,document); 
          document.getElementById(DivId).appendChild(htmlCode); 
       } 
       else 
       { 
          if (window.ActiveXObject) 
          { 
             // script pour IE 
             // Chargement XML 
                var xml = new ActiveXObject("Microsoft.XMLDOM") 
             xml.async = false 
             xml.load(xmlPath) 
     
             // Chargement XSL 
             var xsl = new ActiveXObject("Microsoft.XMLDOM") 
             xsl.async = false 
             xsl.load(xslPath) 
     
             // Transformation 
             document.getElementById(elementId).innerHTML = xml.transformNode(xsl); 
          } 
          else 
          { 
                alert("Xslt non supporté");
          } 
       } 
    }

    J’ai du mettre en haut de la fonction postHTML : car sinon
    Je ne vais jamais dans le else
    Les 2 autres lignes n’ont rien donné :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //if (document.implementation && document.implementation.createDocument) 
    //if( !(window.ActiveXObject))

    Merci pour vos conseils

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 107
    Points : 72
    Points
    72
    Par défaut
    En fait, il suffit de transférer au webservice un paramètre afin qu'il applique ou non la feuille de style.

    Reste mon problème avec ActiveXObject pour lequel je vais faire une nouvelle discussion

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/07/2015, 14h24
  2. [SunOS 5.9] Valider un fichier XML sans utiliser xmllint ?
    Par Dalai-Lama dans le forum Solaris
    Réponses: 0
    Dernier message: 14/10/2013, 10h23
  3. Réponses: 3
    Dernier message: 21/01/2013, 17h28
  4. [JDOM] comment écrire dans un fichier xml sans écraser son contenu
    Par solawe dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 25/03/2008, 14h11
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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