Impossible de parser un flux XML sous IE7 [Résolu]

Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
- - Dernière réponse :  sfresnel - 28 juil. 2008 à 10:36
Bonjour

je parse un flux XML, avec FF3 et I.E6 pas de souci mais avec IE 7 ça marche pas

voila le flux

<html>
<head>
</head>

azertyuiop:[AAA]:[BBB]:[CCC]

</html>

voila la ligne qui parse

return XHRequest.responseXML.documentElement.getElementsByTagName("body").item(0).firstChild.nodeValue.split(":")

sous IE7 j'ai ce message

Erreur : 'XHRequest.responseXML.documentElement' a la valeur null ou n'est pas un objet
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
3
Merci
Bon ba si ça marche comme ça c'est bien...

Par contre j'ai pas compris pourquoi tu ne peus pas utiliser php !

C'est quoi lotus note ?

a++

Si la réponse vous convient, pensez : Réponse acceptée !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 215 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nicomilville
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
0
Merci
Salut, c'est normal, sous IE c'est un activeX et il ne s'appelle pas comme ça ...

Regarde ça :

 var xhr_object = null;
 
 if(window.XMLHttpRequest) FF
  xhr_object = new XMLHttpRequest();
 else if(window.ActiveXobject)
  xhr_object = new ActiveXobject("Microsoft.XMLHTTP"); //IE
 else{
  alert("Votre navigateur n'est pas compatible avec XMLHttpRequest");
  return;
 }

Rajoute ces ligne en changeant le nom de la variable et tu verra ça marchera !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
Commenter la réponse de nicomilville
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
merci mais ça ne change rien, et le code est fonctionnelle avec ie6...

voici le code complet

   if(window.XMLHttpRequest){
      // Firefox et autres
      XHRequest = new XMLHttpRequest();
      if (XHRequest.overrideMimeType){XHRequest.overrideMimeType('text/xml')}
   }else if(window.ActiveXObject){
      // Internet Explorer
         try { XHRequest = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch(e) {XHRequest = new ActiveXObject("Microsoft.XMLHTTP");
         }
   }else{
      //non supporté par le navigateur
      alert("Ajax Error :\n XMLHttpRequest non supporté par le navigateur");
      return "";
   }

   XHRequest.open("Get", urlRequeste , false);
   XHRequest.send(null);

      //traitement uniquement si le flux XML est complètement chargé; 4 = complet"
      if (XHRequest.status == 200) {
     
      return XHRequest.responseXML.documentElement.getElementsByTagName("body").item(0).firstChild.nodeValue.split(":")
Commenter la réponse de rhan_659
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
Bonjour,

pour le xml, avec IE, il faudrait utiliser :
                            xmlD = new ActiveXObject('Microsoft.XMLDOM');
                            xmlD.async=true;
                            xmlD.onreadystatechange = function ()
                            {    if ( xmlD.readyState == 4 )
                                {    ici on traite xmlD.xml    }
                            }
attention : new XMLHttpRequest(); répond true pour IE7,                       

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
j'ai oublié le                  xmlD.load(fichier);

et de dire qu'avec FF, normalement :
                xmlD = document.implementation.createDocument('','', null);
                xmlD.onload = function()   
                {    traitement de xmlD.documentElement.textContent);                   
                }
                xmlD.load(fichier);

ajax c'est pour communiquer avec le langage serveur, pas pour récupérer du xml
( même si ça baigne avec FF, avec IE je ne pense pas... peut-être me trompe-je )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
ah ben zut, je n'avais pas vu ce que tu fais voir  !!

<html>
<head>
</head>

azertyuiop:[AAA]:[BBB]:[CCC]

</html>

n'est pas un flux xml ! c'est du html !
curieux de vouloir traiter cela comme du xml ?
tu peux mettre la réponse dans un div ( caché )
et y utiliser les getElementsByTagName....

pas sûr que le traitement du xml que je proposais
fonctionne dans ce cas.   à tester ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
je vux le traiter comme un flux xml car je ne veux récuperer que "azertyuiop:[AAA]:[BBB]:[CCC]"

pas le reste, et je me suis dis que si je le traitait comme un flux xml ça serais plus facile pour récupérer l'info dont j'ai besoin.

autre question si " new XMLHttpRequest(); répond true pour IE7, " je fais comment pour instancier correctement en fonction du navigateur ?
Commenter la réponse de rhan_659
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
re,

je pensais qu'en utilisant XHRequest.responseXML au lieux de XHRequest.responseTest j'obtiendrais un flux xml au lieux d'un text meme si coté format c'est pas extra-ordinaire

ce flux est bien générer par le serveur, le probleme c'est pour en extraire l'information simplement.
Commenter la réponse de rhan_659
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
0
Merci
Re,

Je t'aurai bien conseillé la fonction PHP : strip_tags

Dommage que tu veuille le faire en javascript !

www.php.net/strip_tags

a++

Si la réponse vous convient, pensez : Réponse acceptée !
Commenter la réponse de nicomilville
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
tu ne peux pas renvoyer que "azertyuiop:[AAA]:[BBB]:[CCC]" ?
un petit split sur la réponse et basta.

ou alors renvoi un flux xml... mais traite le comme du xml

<?xml version="1.0" encoding="ISO-8859-1"?>
    <tout>
            azertyuiop

            [AAA]

            [BBB]

            [CCC]

    </tout>

>> je fais comment pour instancier correctement en fonction du navigateur ?
comme tu as fait je pense pas regardé de près mais ça doit baigner

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
Merci pour l'idée du PHP mais je suis sous Lotus Notes, j'aurais bien aimé ne renvoyer que les valeurs désirez mais mon serveur domino me les encadrent automatiquement avec les balises html.

donc j'ai fait autrement, dans mon agent qui génére mon string je les encadré de balise bidon <Data></Data>

et ensuite je ne le gere plus comme du xml mais comme du texte et j'extrait les voulue via un indexof

<html>
<head>
</head>

<Data>azertyuiop:[AAA]:[BBB]:[CCC]</Data>

</html>

et le traitement donne ça

return XHRequest.responseText.substring(XHRequest.responseText.indexOf("<Data>")+6,XHRequest.responseText.indexOf("</Data>")).split(':');

au finale c'est pas plus compliqué qu'avec le flux xml sauf si vous connaisser une meilleur méthode je vaisgarder cellelà ! et la tester madi sur ie6
Commenter la réponse de rhan_659
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
Pour Info Lotus Notes / Domino est un systeme client/server professionnelle d'IBM

il permet de faire de la messagerie, groupeware, intranet, serveur d'appli (lotus), server web. voila pourquoi je veux travailler en JS sans utiliser de PHP.

il est normale que tu ne connaisse pas Lotus Notes c'est un produit inconnus du grand public et que l'on ne trouve que dans le grosse société
Commenter la réponse de rhan_659
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
ou tu colles la réponse dans innerHTML d'un div, et tu utilises :
document.getElementById('id du div dont on cause').getElementsByTagName('Data')[0].firstChild.nodeValue
je ne dis pas que c'est une meilleure méthode   ;o)

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
0
Merci
ok, mais j'étais pas au courant que les serveurs IBM n'acceptaient pas le php ....

a++

Si la réponse vous convient, pensez : Réponse acceptée !
Commenter la réponse de nicomilville
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
@nico : >>..serveurs IBM n'acceptaient pas le php
c'est pas tout à fait ça nico.
le serveur qu'utilise le monsieur n'autorise (peut-être)  pas, dans les "conditions" où il utilise...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
0
Merci
a ok,

merci bultez !

Toujours aussi savant !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
Commenter la réponse de nicomilville
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
merci

mon but n'est pas d'afficher dans une div, mais de récupéré de l'information serveur que le js ne peut produire naturellement en évitant qu'il soit calculé sur le client pour des raisons de sécurité.

sinon les serveur materiel d'ibm sont comme tout les autres serveur, ici je parle de serveur logiciel. utiliser le PHP doit etre faisable dans une certaine limite, mais ça na pas tellement d'interret vu que j'ai mes propres méthode d'acces aux données

en tout cas merci pour le coup de paluche
Commenter la réponse de rhan_659
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
je parlais de mettre la réponse dans un div, pas pour l'afficher !!!
( suffit de mettre style="display:none" )
mais pour utiliser .getElementsByTagName('Data')[0].firstChild.nodeValue
tout dépend des réponses possibles, ça peut devenir très vite difficile avec substr et indexof...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
ch'tiot exemple

<script>
    var d=document.getElementById('d1');
    d.innerHTML='<html><head></head><Data>azertyuiop:[AAA]:[BBB]:[CCC]</Data></html>';
    alert(d.getElementsByTagName('Data')[0].firstChild.nodeValue);
</script>

bien sûr le rouge serait ta réponse d'ajax.

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
Merci pour l'idée

mais le but étant de ne pas stocker l'information dans un élément mais juste une variable le temps d'un traitement.

je peut me permettre de faire ça car la valeur retourné sera vraimment comme ça :

azertyuiop:[AAA]:[BBB]:[CCC]

parfois

azertyuiop

mais rarement

azertyuiop:[AAA]:[BBB]:[CCC]:[DDD]:[EEE]:[FFF]

donc pour mon besoin ça convient, parceque la chaine ne sera pas tres long. j'aurai préféré pouvoir la parsé comme un flux xml (ça passe sous ff et ie6 ) mais ie7 le refuse donc je change mon fusil d'épaule

en tout cas merci pour les conseils
Commenter la réponse de rhan_659