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

XML/XSL et SOAP Discussion :

Msxml et sortie asynchrone


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut Msxml et sortie asynchrone
    Bonjour,
    Je développe une application qui comporte des traitements cotés clients dont certains utilisent une fonction que j'ai codé et qui est chargé de transformer un fichier xml grâce à un autre fichier xsl.

    Du coté de firefox la transformation s'effectue sans accroc.
    Mais du coté de ie j'ai un problème du fait du traitement asynchrone du processeur xsl . En effet je ne sais pas comment attendre que le processeur est fini son traitement pour récupérer le résultat du output.
    La fonction alerte me donne comme résultat un output divisé en plusieurs parties du fait de l'asynchronisme.

    Voici le code source de ma fonction :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    function RecupXML(xslt,xml,maDiv,maFunc){	
        var OutputDiv = document.getElementById(maDiv);
        if (window.XSLTProcessor){
            // Firefox, Opera 8.0+, Safari
    		var oHTTP = null;
            oHTTP = new XMLHttpRequest();
            oHTTP.open( 'POST' , xslt , true );    
            oHTTP.onreadystatechange = function(){	
                if( oHTTP.readyState == 4 ){
                    var XSLDoc = oHTTP.responseXML;
                    if( XSLDoc == null ){
                        var xmlstring = oHTTP.responseText;
                        XSLDoc = ( new DOMParser() ).parseFromString( xmlstring , "text/xml" );
                    }
                    oHTTP.open( 'POST', xml , true );
                    oHTTP.onreadystatechange = function(){
                        if( oHTTP.readyState == 4 ){                
                            var XMLDoc = oHTTP.responseXML;
                            if( XMLDoc == null ){
    							var xmlstring = oHTTP.responseText;
                                XMLDoc = ( new DOMParser() ).parseFromString( xmlstring, "text/xml" );
                            }
                            var XSLProcessor = null;
                            XSLProcessor = new XSLTProcessor();
                            XSLProcessor.importStylesheet( XSLDoc );
                            var html = XSLProcessor.transformToFragment( XMLDoc, document );
                            html = ( new XMLSerializer() ).serializeToString( html );
                            OutputDiv.innerHTML = html ;
    						if( maFunc != "" ) eval( maFunc );                                                
                        }
                    }
                    oHTTP.send('');
                }       
            }	
            oHTTP.send('');
        }
        // IE6.0 +
        else if(window.ActiveXObject)
        {  
    	var XMLDoc = null;         
    	var XSLDoc = null;	   
    	var XSLProcessor = null;
    	var XSLTemplate; 		
            XSLDoc = new ActiveXObject( "MSXML2.FreeThreadedDOMDocument.3.0" );
            XSLDoc.async = false;
            XSLDoc.load( xslt );
     
            XMLDoc = new ActiveXObject( "MSXML2.DOMDocument.3.0" );
            XMLDoc.onreadystatechange = ReadyStateChange;
            XMLDoc.async = true;
     
            XSLTemplate = new ActiveXObject( "MSXML2.XSLTemplate.3.0" );
            XSLTemplate.stylesheet = XSLDoc;		
            XSLProcessor = XSLTemplate.createProcessor();
            XSLProcessor.input = XMLDoc; 
            XMLDoc.load( xml );
     
            function ReadyStateChange(){
                if ( XMLDoc.readyState == 4 ){
    				XSLProcessor.transform();			
    				alert(XSLProcessor.readyState);
    				alert(XSLProcessor.output);
    				OutputDiv.innerHTML = XSLProcessor.output;
    				if( maFunc != "" ) eval( maFunc );
    			}			
    		}
        }	
    }
    Voila , si quelqu'un a déjà rencontré le même problème je suis tout ouïe.
    Si vous avez besoin de plus de renseignement ou avez des conseils à me donner je ne suis pas contre non plus!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut
    J'ai résolu mon problème entre temps , je publie le nouveau code a cas où quelqu'un voudrait s'en servir.
    ( le problème etait que j'utilisais la propriété .innerHTML d'une balise select ce qui ne plaisait pas à ie )
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    function RecupXML(xslt,xml,maDiv,maFunc){	
        var OutputDiv = document.getElementById(maDiv);
        if (window.XSLTProcessor){
            // Firefox, Opera 8.0+, Safari
    		var oHTTP = null;
            oHTTP = new XMLHttpRequest();
            oHTTP.open( 'POST' , xslt , true );    
            oHTTP.onreadystatechange = function(){	
                if( oHTTP.readyState == 4 ){
                    var XSLDoc = oHTTP.responseXML;
                    if( XSLDoc == null ){
                        var xmlstring = oHTTP.responseText;
                        XSLDoc = ( new DOMParser() ).parseFromString( xmlstring , "text/xml" );
                    }
                    oHTTP.open( 'POST', xml , true );
                    oHTTP.onreadystatechange = function(){
                        if( oHTTP.readyState == 4 ){                
                            var XMLDoc = oHTTP.responseXML;
                            if( XMLDoc == null ){
    							var xmlstring = oHTTP.responseText;
                                XMLDoc = ( new DOMParser() ).parseFromString( xmlstring, "text/xml" );
                            }
                            var XSLProcessor = null;
                            XSLProcessor = new XSLTProcessor();
                            XSLProcessor.importStylesheet( XSLDoc );
                            var html = XSLProcessor.transformToFragment( XMLDoc, document );
                            html = ( new XMLSerializer() ).serializeToString( html );
                            OutputDiv.innerHTML = html ;
    						if( maFunc != "" ) eval( maFunc );                                                
                        }
                    }
                    oHTTP.send('');
                }       
            }	
            oHTTP.send('');
        }
        // IE6.0 +
        else if(window.ActiveXObject)
        {  
    	var XMLDoc = null;         
    	var XSLDoc = null;	   
    	var XSLProcessor = null;
    	var XSLTemplate; 		
            XSLDoc = new ActiveXObject( "MSXML2.FreeThreadedDOMDocument" );
            XSLDoc.async = false;
            XSLDoc.load( xslt );
     
            XMLDoc = new ActiveXObject( "MSXML2.DOMDocument" );
            XMLDoc.onreadystatechange = ReadyStateChange;
            XMLDoc.async = true;
     
            XSLTemplate = new ActiveXObject( "MSXML2.XSLTemplate" );
            XSLTemplate.stylesheet = XSLDoc;		
            XSLProcessor = XSLTemplate.createProcessor();
            XSLProcessor.input = XMLDoc; 
            XMLDoc.load( xml );
     
            function ReadyStateChange(){
                if ( XMLDoc.readyState == 4 ){
    				XSLProcessor.transform();
    				var tempString = XSLProcessor.output;
    				OutputDiv.innerHTML = tempString;
    				if( maFunc != "" ) eval( maFunc );
    			}			
    		}
        }	
    }

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

Discussions similaires

  1. Entrées sorties Asynchrones
    Par EtuParisDescartes dans le forum POSIX
    Réponses: 4
    Dernier message: 06/12/2012, 10h42
  2. Réponses: 2
    Dernier message: 05/01/2007, 16h57
  3. Réponses: 1
    Dernier message: 02/05/2006, 11h41
  4. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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