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 :

Parser flux XML


Sujet :

JavaScript

Vue hybride

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

    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut Parser flux XML
    Bonjour je n'arrive pas à faire fonctionner mon code, il me mets toujours "itemsNewData.item(0) has no properties"

    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
    function valeurConfig(id_config,newValeur) {
        var url = "valeurConfig?newValeur="+newValeur+"&id_config="+id_config;
       	if (window.XMLHttpRequest) {
           xhr = new XMLHttpRequest();
       } else if (window.ActiveXObject) {
           xhr = new ActiveXObject("Microsoft.XMLHTTP");
       }
       xhr.open("GET", url, true);
       xhr.onreadystatechange = retourNewValeur;
       xhr.send(null);
    }
     
    function retourNewValeur(){
      var message = "";
     
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          // exploitation des données de la réponse
          var docXML = xhr.responseXML;
          alert(xhr.responseText);
          if( xhr.responseXML == null)
            alert("La réponse du serveur n'était pas un document xml valide !");
          var itemsNewData = docXML.getElementsByTagName("data");
          var itemsNewvalue = itemsNewData.item(0).getElementsByTagName("newvalue");
          var itemsidconfig = itemsNewData.item(0).getElementsByTagName("id_config");
     
     
          alert(itemsNewData.nodeValue);
     
    	  mdiv = document.getElementById(itemsidconfig.firstChild.data);
    	  mdiv.innerHTML = itemsNewvalue.firstChild.data;  
          }
       }
    }
    Pourtant quand je fais le premier alert j'ai bien

    <?xml version='1.0' ?><data><newvalue>Enfant</newvalue><id_config>711</id_config></data>

    Je ne voie pas ou est le probleme

  2. #2
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    C'est normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var itemsNewData = docXML.getElementsByTagName("data");
    te retourne une liste d'éléments. Si tu n'as qu'un seul élément data, pour le récupérer il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var itemsNewDataList = docXML.getElementsByTagName("data");
    if (itemsNewDataList.length>0) {
         var itemsNewData = itemsNewDataList[0];
         // la suite de ton code ici
    } else {
        alert("Element \"data\" non trouvé");
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Il m'ouvre à chaque fois un pop up en me disant "Element 'data' non trouvé".

    J'envoie à partir de ma classe JAVA "<data><newvalue>Enfant</newvalue><id_config>711</id_config></data>"

    en xml.

  4. #4
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Il te faut absolument rajouter cela côté java avant d'envoyer le flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
       <newvalue>Enfant</newvalue>
       <id_config>711</id_config>
    </data>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Je deviens fou, cela ne marche toujours pas. Je vais te montrer ce que je fais exactement.

    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
    function valeurConfig(id_config,newValeur) {
        var url = "valeurConfig?newValeur="+newValeur+"&id_config="+id_config;
           id_config = id_config;
    	if (window.XMLHttpRequest)                
    	{ 
        	xhr = new XMLHttpRequest();  
    	} 
    	else if (window.ActiveXObject)                   
       {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");   // Internet Explorer 
       }
       xhr.open("GET", url, true);
       xhr.onreadystatechange = retourNewValeur;
       xhr.send(null);
    }
     
    function retourNewValeur(){
      var message = "";
     
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          // exploitation des données de la réponse
          var docXML = xhr.responseXML;
     
          var itemsNewDataList = docXML.getElementsByTagName("data");
          if (itemsNewDataList.length>0) {
         var itemsData = itemsNewDataList[0];
          var newvalue = itemsData.item(0).getElementsByTagName("newvalue").firstChild.nodeValue;
          var idconfig = itemsData.item(0)..getElementsByTagName("id_config").firstChild.nodeValue;
    	} else {
    	    alert("Element \"data\" non trouvé");
    	}
     
    	  mdiv = document.getElementById(idconfig);
    	  mdiv.innerHTML = newvalue ;  
          }
       }
    }
    Coté Java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    response.setContentType("text/xml");
    		response.setCharacterEncoding("UTF-8");
        	response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();
    					out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?><data><newvalue>"+psu.getDetail()+"</newvalue><id_config>"+id_config+"</id_config></data>");
    					out.flush();
    					out.close();

    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(xhr.responseText);
    J'obtiens bien <?xml version="1.0" encoding="UTF-8"?><data><newvalue>Enfant</newvalue><id_config>711</id_config></data>

    Je sèche sur mon problème. Pourtant je pense faire cela correctement.

  6. #6
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    C'est toujours la même erreur ou une autre ?

    De plus sur cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var idconfig = itemsData.item(0)..getElementsByTagName("id_config").firstChild.nodeValue;
    - tu as 2 points après item(0)
    - Tu ne gères pas le fait que "getElementsByTagName" peut te renvoyer une liste vide (en fait tu ne gères pas les erreurs).

    Essaye plutôt ca :

    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
     
    function retourNewValeur(){
        var message = "";
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                // exploitation des données de la réponse
                var docXML = xhr.responseXML;
                var itemDataList = docXML.getElementsByTagName("data");
                if (itemDataList.length>0) {
                     var itemData = itemDataList[0];
                     var newvalueList = itemData.getElementsByTagName("newvalue");
                     var idconfigList = itemsData.getElementsByTagName("id_config");
                     if (newvalueList.length>0 && idconfigList.length>0) {
                        var newvalue = newvalueList[0];
                        var idconfig = idconfigList[0];
                        var mdiv = document.getElementById(idconfig);
                        mdiv.innerHTML = newvalue ;
                     } else {
                        alert("Les données ne sont pas exploitables");
                     }
                } else {
                	alert("Element \"data\" non trouvé");
                }
            }
        }
    }

Discussions similaires

  1. Solution pour parser flux XML dans navigateur
    Par Freedolphin dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 05/02/2012, 18h00
  2. Parser flux XML sur plusieurs niveaux
    Par Freedolphin dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2012, 18h42
  3. Parser flux xml avec balises sur plusieurs niveaux
    Par Freedolphin dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 19/09/2011, 15h39
  4. Parser flux XML avec balise contenant ":" génère une erreur
    Par Pierrick81 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 22/08/2011, 19h19
  5. aide parser flux xml en php
    Par calitom dans le forum Langage
    Réponses: 4
    Dernier message: 15/05/2009, 10h28

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