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 :

Champ null dans fichier XML traitement ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut Champ null dans fichier XML traitement ?
    Bonjour,

    j'aimerais pouvoir gérer les champs null d'un fichier XML.

    Si tous les champs sont remplis, il n'y a aucun problème, la fonction fait ce qu'elle a à faire mais dès qu'un champ vide est présent l'application m'indique l'erreur suivante que je n'arrive pas à résoudre ..

    Uncaught TypeError: Cannot call method 'getElementsByTagName' of null

    J'ai essayé de traiter ces champs null avec le code suivant mais cela ne marche pas :

    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
    function import_sess_list(id_sess)
    {
    	var data = 'traitement_sess='+true+'&id_sess='+id_sess;
    	var XMLhttp = new XMLHttpRequest();
    	XMLhttp.open("POST","traitement/traitement_import.php",true);
    	XMLhttp.onreadystatechange=function(){
    		if (XMLhttp.readyState==4 && XMLhttp.status==200){
    			//  Assigner le fichier XML à une variable
    			var doc = XMLhttp.responseXML; 
    			//  Lire le premier élément avec DOM
     
    			var element = doc.getElementsByTagName('auto_eval').item(0).firstChild ? doc.getElementsByTagName('auto_eval').item(0).firstChild.data : null;
    			var element2 = doc.getElementsByTagName('util_langue').item(0).firstChild ? doc.getElementsByTagName('util_langue').item(0).firstChild.data : null ;
    			var element3 = doc.getElementsByTagName('obj').item(0).firstChild ? doc.getElementsByTagName('obj').item(0).firstChild.data : null;
    			var element4 = doc.getElementsByTagName('dispo').item(0).firstChild ? doc.getElementsByTagName('dispo').item(0).firstChild.data : null;
     
    			//  Copier le contenu dans le formulaire 
    			document.form_ajout_sess.auto_evaluation.value= element;   
    			document.form_ajout_sess.utilisation_langue.value= element2;   
    			document.form_ajout_sess.objectif.value= element3;   
    			document.form_ajout_sess.disponibilite.value= element4; 
     
    		}
    	};
    	XMLhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
    	XMLhttp.send(data);
    }
    voici mon fichier avec le xml dedans :

    Code php : 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
    <?php
    header('Content-Type: text/xml');
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ? >\n";
    echo "<donnees>\n";
     
    include_once("../connexion.php");
     
    if(isset($_POST['traitement_sess']) && isset($_POST['id_sess']) && !empty($_POST['id_sess']))
    {
     
    	$id_sess=$_POST['id_sess'];
    	/*INFOS SESSIONS POUR IMPORT apres choix list deroulante*/
    	try {
     
    		// Connect and create the PDO object
    		$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
    		$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
     
    		// Define and prepare an INSERT statement
    		$sql="SELECT sess_auto_eval, sess_utilisation_langue, sess_objectif, sess_dispo FROM sess WHERE sess_id = '".$id_sess."'";
     
     
    		$result = $conn->query($sql);  
     
     
    		while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    			echo "<auto_eval>"; echo $row['sess_auto_eval']; echo "</auto_eval>\n";
    			echo "<util_langue>"; echo $row['sess_utilisation_langue']; echo "</util_langue>\n";
    			echo "<obj>"; echo $row['sess_objectif']; echo "</obj>\n";
    			echo "<dispo>"; echo $row['sess_dispo']; echo "</dispo>\n";
     
    		}
     
    		$conn = null;        // Disconnect
     
    	} catch(PDOException $e) {
    		echo $e->getMessage();
    	}
    }
     
    echo "</donnees>\n";
     
    ?>

    Si vous savez comment faire, merci de mon donner un tit coup de pouce
    Florian

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Quant un champ est null, le tag doit être auto-fermant comme <nomChamp />.


    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Merci de l'info tout d'abord, j'ai fait de la façon dont tu m'as dis mais j'ai toujours la même erreur alors que le xml généré est bon ..

    Voici mon code php qui génére le XML :
    Code php : 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
    while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    	if($row['sess_auto_eval'] == ' '){
    		echo "<auto_eval />\n";
    	} else { 
    		echo "<auto_eval>"; echo $row['sess_auto_eval']; echo "</auto_eval>\n"; 
    	}
    	if($row['sess_utilisation_langue'] == ' '){
    		echo "<util_langue />\n";
    	} else {
    		echo "<util_langue>"; echo $row['sess_utilisation_langue']; echo "</util_langue>\n";
    	}
    	if($row['sess_objectif'] == ' '){
    		echo "<obj />\n";
    	} else {
    		echo "<obj>"; echo $row['sess_objectif']; echo "</obj>\n";
    	}
    	if($row['sess_dispo'] == ' '){	
    		echo "<dispo />\n";
    	} else {		
    		echo "<dispo>"; echo $row['sess_dispo']; echo "</dispo>\n";
    	}
    }
    La fonction js est toujours la même est fonctionne parfaitement losrque les champs du xml sont remplis ...

    Erreur : Uncaught TypeError: Cannot call method 'getElementsByTagName' of null , sur la première ligne où la méthode 'getElementsByTagName' est appelée...

    Merci de votre temps !

    Edit: Ma BDD retourne un espace quand les champs sont vides , c'ets pour cela que je teste les espaces !!

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Il faut déjà vérifier que le résultat renvoyé soit du XML valide...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Je viens de générer le XML sur un exemple ou ma fonction plante , voici le xml généré :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8" ?>
    <donnees>
    <auto_eval />
    <util_langue>en aurait besoin au quotidien, en situation professionnelles & informelles</util_langue>
    <obj />
    <dispo />
    </donnees>

    Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le & n'est pas échappé. Il faut le remplacer par &amp;.
    C'est comme en HTML, sauf qu'en HTML les navigateurs tolèrent ce genre d'erreurs. En XML, non.

    Et je trouve étrange que cette erreur n'ait pas été détectée avant le getElementsByTagName()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non, c'est normal que l'erreur ne soit levée qu'à l'utilisation de getElementsByTagName() :
    Citation Envoyé par responseXML
    The response to the request as a DOM Document object, or null if the request was unsuccessful, has not yet been sent, or cannot be parsed as XML or HTML. The response is parsed as if it were a text/xml stream. When the responseType is set to "document" and the request has been made asynchronously, the response is parsed as it were a text/html stream.
    Donc si le XML n'est pas valide, responseXML vaut null et il n'y a erreur que lorsque tu essayes d'appliquer une méthode du DOM XML à null.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Je viens de la décrouvrir en faisant des tests, mais comment l'échapper automatiquement, les données entrer dans ma base doivent en comporter pour la plupart ... ??

    En tout cas merci de porter votre intérêt sur mon problème

    Edit: En effet Bovino, j'ai découvert l'erreur du & en faisant la validation xml de W3C !!

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    CA MARCHE,

    je vous remercie tous, vraiment, heuresement que des gens comme vous sont là pour aider les étudiants en galère de solution !!

    Je poste mes fichiers si un jour, ça peut aider quelqu'un !

    fichier.php qui genere le xml :

    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
    <?php
    header('Content-Type: text/xml');
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
    echo "<donnees>\n";
     
    include_once("../connexion.php");
     
    if(isset($_POST['traitement_sess']) && isset($_POST['id_sess']) && !empty($_POST['id_sess']))
    {
     
            $id_sess=$_POST['id_sess'];
            /*INFOS SESSIONS POUR IMPORT apres choix list deroulante*/
            try {
            
                    // Connect and create the PDO object
                    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
                    $conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
                    
                    // Define and prepare an INSERT statement
                    $sql="SELECT sess_auto_eval, sess_utilisation_langue, sess_objectif, sess_dispo FROM sess WHERE sess_id = '".$id_sess."'";
                    
                    
                    $result = $conn->query($sql);  
     
     
                    while($row = $result->fetch(PDO::FETCH_ASSOC)) {
                            $auto = htmlspecialchars($row['sess_auto_eval'], ENT_QUOTES,'UTF-8');
                            $util = htmlspecialchars($row['sess_utilisation_langue'], ENT_QUOTES,'UTF-8');
                            $obj = htmlspecialchars($row['sess_objectif'], ENT_QUOTES,'UTF-8');
                            $dispo = htmlspecialchars($row['sess_dispo'], ENT_QUOTES,'UTF-8');
                            if($row['sess_auto_eval'] == ' '){
                                    echo "<auto_eval />\n";
                            } else { 
                                    echo "<auto_eval>"; echo $auto; echo "</auto_eval>\n"; 
                            }
                            if($row['sess_utilisation_langue'] == ' '){
                                    echo "<util_langue />\n";
                            } else {
                                    echo "<util_langue>"; echo $util; echo "</util_langue>\n";
                            }
                            if($row['sess_objectif'] == ' '){
                                    echo "<obj />\n";
                            } else {
                                    echo "<obj>"; echo $obj; echo "</obj>\n";
                            }
                            if($row['sess_dispo'] == ' '){  
                                    echo "<dispo />\n";
                            } else {                
                                    echo "<dispo>"; echo $dispo; echo "</dispo>\n";
                            }
                    }
                            
                    $conn = null;        // Disconnect
            
            } catch(PDOException $e) {
                    echo $e->getMessage();
            }
    }
     
    echo "</donnees>\n";
     
    ?>
    fonction javascript method AJAX :
    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
    function import_sess_list(id_sess)
    {
    	var data = 'traitement_sess='+true+'&id_sess='+id_sess;
    	var XMLhttp = new XMLHttpRequest();
    	XMLhttp.open("POST","traitement/traitement_import.php",true);
    	XMLhttp.onreadystatechange=function(){
    		if (XMLhttp.readyState==4 && XMLhttp.status==200){
    			//  Assigner le fichier XML à une variable
    			var doc = XMLhttp.responseXML; 
    			//  Lire le premier élément avec DOM
     
    			var element = doc.getElementsByTagName('auto_eval').item(0).firstChild ? doc.getElementsByTagName('auto_eval').item(0).firstChild.data : null;
    			var element2 = doc.getElementsByTagName('util_langue').item(0).firstChild ? doc.getElementsByTagName('util_langue').item(0).firstChild.data : null ;
    			var element3 = doc.getElementsByTagName('obj').item(0).firstChild ? doc.getElementsByTagName('obj').item(0).firstChild.data : null;
    			var element4 = doc.getElementsByTagName('dispo').item(0).firstChild ? doc.getElementsByTagName('dispo').item(0).firstChild.data : null;
     
    			//  Copier le contenu dans le formulaire 
    			document.form_ajout_sess.auto_evaluation.value= element;   
    			document.form_ajout_sess.utilisation_langue.value= element2;   
    			document.form_ajout_sess.objectif.value= element3;   
    			document.form_ajout_sess.disponibilite.value= element4; 
     
    			/*
    			var element = doc.getElementsByTagName('auto_eval').item(0);
    			var element2 = doc.getElementsByTagName('util_langue').item(0);
    			var element3 = doc.getElementsByTagName('obj').item(0);
    			var element4 = doc.getElementsByTagName('dispo').item(0);
     
    			//  Copier le contenu dans le formulaire 
    			document.form_ajout_sess.auto_evaluation.value= element.firstChild.data;   
    			document.form_ajout_sess.utilisation_langue.value= element2.firstChild.data;   
    			document.form_ajout_sess.objectif.value= element3.firstChild.data;   
    			document.form_ajout_sess.disponibilite.value= element4.firstChild.data; 
    			*/
    		}
    	};
    	XMLhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
    	XMLhttp.send(data);
    }
    MERCI ENCORE DDD

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/07/2009, 14h19
  2. Balise html dans fichier XML
    Par pierrox dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 19/09/2005, 09h20
  3. [XML] Incorporation de balises HTML dans fichier XML
    Par wazzzzza dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 26/07/2005, 14h17
  4. [JDOM] Ajout élément dans fichier XML
    Par delinot dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 18/07/2005, 11h10
  5. Pb de balises dans fichier XML
    Par allstar dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h59

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