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

JavaScript Discussion :

[JScript][XML] Parcourir un flux XML obtenu par XmlHttpRequest


Sujet :

JavaScript

Vue hybride

ninox_ [JScript][XML] Parcourir un... 25/04/2007, 16h03
roro06 Bonjour grosso modo : ... 25/04/2007, 16h47
ninox_ Salut c'est encore moi ;) ... 26/04/2007, 11h41
roro06 Perso, je conserve : ... 26/04/2007, 11h51
ninox_ ah lala.... si ca pouvait... 26/04/2007, 12h13
roro06 peut -être l'idée est de... 27/04/2007, 11h25
ninox_ Salut. j'ai lu quelque... 30/04/2007, 10h34
roro06 Bonjour Je n'ai jamais... 30/04/2007, 12h00
ninox_ Je suis tombé sur un topic... 30/04/2007, 12h13
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut [JScript][XML] Parcourir un flux XML obtenu par XmlHttpRequest
    Bonjour à tous.

    Avant toute chose, je souhaite vous prévenir que j'ai fait des centaines de tests, parcourus d'inombrables pages internet à la recherche d'une solution... mais que malgré tout je suis tjrs bloqué sur le même point.

    Il s'agit de parcourir un flux XML récupéré par XmlHttpRequest, pour tester l'existence de tel ou tel noeud.

    Tout d'abord, voici un extrait du flux XML récupéré (tree):

    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
     
    <?xml version="1.0" encoding="utf-8" ?> 
    - <root>
    - <page id="cate_b">
      <intro9zones value="false" /> 
      </page>
    + <category name="FEMME" id="femme" zid="femme">
    + <childCategories>
    + <category name="Sacs" id="cat10070" zid="femme_sacs">
    + <childCategories>
    - <category name="CHOISISSEZ VOTRE LIGNE">
    - <childCategories>
    - <category name="Canvas Mono" id="cat10071" zid="femme_sacs_canvas_mono">
      <image url="/images/categories/femme_sacs_canvas_mono.jpg" /> 
      </category>

    Je voudrais déjà en terme de test, pouvoir vérifier l'existence de noeuds identifiés par "category".


    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
    function traitement(){
    
    var xhr = getXhr();
    
    
    // On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    	// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			
                    // ICI que dois-je écrire pour faire mon test sur le flux XML xhr?
    		
    		}
            }	
    
    // requete 
    
    xhr.open("POST",url,true);
    xhr.send(null);
    
    }	
    
    
    
    function getXhr()
    {
    var xhr = null; 
    	 
    	if(window.XMLHttpRequest) // Firefox et autres
    	   xhr = new XMLHttpRequest(); 
    	else if(window.ActiveXObject){ // Internet Explorer 
    	   try {
                    xhr = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
    	}
    	else { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   xhr = false; 
    	}
    
     return xhr;
    }

    Je ne parviens pas à trouver une méthode qui fonctionne basée sur AJAX ou DOM, pour travailler à partir de mon XHR....


    Merci de m'apporter un coup de main !

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Bonjour

    grosso modo :

    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(xhr.readyState == 4 && xhr.status == 200){
     
                    // ICI que dois-je écrire pour faire mon test sur le flux XML xhr?
    		var xml=xhr.responseXML;
    // ensuite : parcourir le fichier xml, comme le DOM : 
    for (var i=0; i<xml.getElementsByTagName("category").length; i++)
    {
    alert(xml.getElementsByTagName("category")[i].getAttribute("zid"));
    /// etc ...
    }
    		}

    Cordialement
    roro


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    Salut c'est encore moi

    J'ai une question par rapport à ce que tu proposes et que j'ai complété grâce à une doc que l'on m'a fait parvenir (Beginning XML with DOM and Ajax, Apress).

    Est-ce un problème si la page de mon script lançée en local fait appel à une requête (donc la récupération d'un flux XML) sur un serveur distant ?

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    	<html>
    	<head>
    	<title>Get XML test page</title>
    	<style>
    	//some style declarations left out for brevity
    	</style>
     
    	<script type="text/javascript">
    	var xmlhttp=null;
    	var strOutput ="";
    	var toLoad = "http://my_server.fr/categories_b.jsp;jsessionid=OC0MVZ?langue=fr%5FFR&buy=1&uniqueid=OC0MVZ";
     
     
    	function sendRequest(){
    	if (window.XMLHttpRequest){
    	xmlhttp=new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject){
    	try {
    	xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
    	} catch(e) {
    	try {
    	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    	} catch(e) {
    	xmlhttp = false;
    	}
    	}
    	}
    	if (xmlhttp){
    	xmlhttp.onreadystatechange=onReadyState;
    	// xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');        -> POST
    	xmlhttp.open("GET", toLoad, true);
    	xmlhttp.setRequestHeader('Content-Type', 'text/xml'); 
    	xmlhttp.send(null);
    	}
    	}
     
     
    	function onReadyState(){
    	if (xmlhttp.readyState==4){
    	if (xmlhttp.status==200) {
     
    		var xmlDoc = xmlhttp.responseXML;
    		var rep_list = xmlDoc.getElementsByTagName("category");
    		for (var i=0; i < rep_list.length; i++) {
    		strOutput += rep_list[i].firstChild.nodeValue + "<br/>";
    		}
    		document.getElementById('divContent').innerHTML=strOutput;
    	}
    	}
    	}
     
     
    	function doReplace(strXML) {
    	var strOut = "";
    	var strL = /</g;
    	var strG = />/g;
    	var strAmp = /&/g;
    	strOut = strXML;
    	strOut = strOut.replace(strAmp, "&amp;");
    	strOut = strOut.replace(strL, "&lt;");
    	strOut = strOut.replace(strG, "&gt;");
    	return strOut;
    	}
     
     
    	</script>
    	</head>
    	<body onload="sendRequest()">
    	<div class="divStyle" id="divContent" >Loading...</div>
    	</body>
    	</html>

    Donc comme vous le constatez, j'utilise l'objet xmlhttp et je récupère le XML de la page du serveur par l'objet responseXML.


    Résultat:
    ma page .html chargeant le script est vide.
    A noter que si je récupère le texte en brut via responseText, j'ai bien le contenu du document chargé par le script.
    Dans la mesure du possible, je souhaiterais passer par responseXML.



    Any suggestions?

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Perso, je conserve :
    setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1")


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    ah lala.... si ca pouvait être ca!


    non, malheureusement ca n'est pas plus concluant. Ou alors j'envoie le setRequestHeader() au mauvais moment? Dans les sources que j'ai citées plus haut, cette instruction est envoyée entre le xmlhttp.open() et xmlhttp.send().



  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    "Normalement", et autant que je sache, il n'est pas possible d'appeler une page sur un autre domaine (en ajax), pour des raisons de sécurité. Cela signifie, en clair, que si tu veux appeler ta page http://my_server.fr/categories_b.jsp depuis la page cliente, cette page cliente doit elle-même avoir été envoyée par le serveur http://my_server.fr


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  7. #7
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    peut -être l'idée est de décomposer ton "faux XML" en tableau :
    var tags=xmlDoc.split("<")

    puis supprimer les caractères "<" et ">" (et "/>")

    for (var i=0; i<tags.length; i++)
    {
    tags[i]=tags[i].replace(/</g, "");
    tags[i]=tags[i].replace(/\/>/g, "");
    tags[i]=tags[i].replace(/>/g, "");
    }

    comme ça tu te retrouve avec un tableaux d'éléments contenant quelque chose comme :
    category id="femme" zid="quesaisje"

    etc ...


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    Salut.

    j'ai lu quelque part que la taille du buffer de xhmlttprequest.responseText était limitée, à 8Ko ou un truc du genre.

    Autrement dit mon flux n'est pas complet et est tronqué avant la balise fermante </root>.

    Y a t'il un moyen de spécifier une limite moins restrictive? ou carrément de ne fixer aucune limite à priori ?


    Merci

  9. #9
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Bonjour

    Je n'ai jamais rien lu concernant de telles limitations. Où as-tu lu ça ?


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    Je suis tombé sur un topic similaire au mien sur un autre forum ....

    Et la personne avait fait la même observation, à savoir que mon responseText n'est finalement pas complet!

Discussions similaires

  1. Flux XML généré par le script PHP incomplet
    Par L.nico dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2008, 15h27
  2. Flux XML par HttpHandler
    Par humaneko dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/01/2008, 10h22
  3. Réponses: 2
    Dernier message: 06/07/2006, 08h47
  4. Réception flux XML posté par fsockopen
    Par salimi dans le forum Langage
    Réponses: 3
    Dernier message: 22/05/2006, 10h01

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