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

AJAX Discussion :

[AJAX] XML & nodeValue : erreur si noeud vide


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 7
    Points
    7
    Par défaut [AJAX] XML & nodeValue : erreur si noeud vide
    Bonjour tout le monde,

    Après des heures (réelles) de recherche je sollicite votre aide.

    Comme le titre l'indique, j'ai des erreurs lorsque j'appelle un noeud vide.

    tracks[t].getElementsByTagName(
    http://127.0.0.1/pure/components/com...x/playlists.js
    Line 102
    La ligne 102 correspondant à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var remix_title = tracks[t].getElementsByTagName("remix_title")[0].firstChild.nodeValue;
    Si le noeud n'est pas vide ça fonctionne correctement.

    Voici un exemple de XML utilisé :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <playlists user="62" username="admin" >
    	<playlist user="62" id="1" active="0" name="Ma playlist 2" style="0" styleTitle="" created="1278337279" lastmod="1278337341" >
    		<item id="25" ref="6" style="16" styleTitle=""  parent="" order="1" >
    			<image>kamui.jpg</image>
    			<artist>Kamui</artist>
    			<remixers></remixers>
    			<title>Thrill Kill (Asys Remix)</title>
    			<remix_title></remix_title>
    			<editor>Fe-Records</editor>
    			<timer>s</timer>
    			<link1></link1>
    			<link2></link2>
    			<link3></link3>
    			<link4></link4>
    		</item>
    		<item id="68" ref="20" style="18" styleTitle=""  parent="" order="2" >
    			<image>mr_blink_gecko.jpg</image>
    			<artist>Mr Blink</artist>
    			<remixers></remixers>
    			<title>Gecko</title>
    			<remix_title></remix_title>
    			<editor>Fly Eye Records</editor>
    			<timer></timer>
    			<link1></link1>
    			<link2></link2>
    			<link3></link3>
    			<link4></link4>
    		</item>
    		<item id="31" ref="8" style="26" styleTitle=""  parent="" order="3" >
    			<image>Noisecontrollers_yellow_minute.jpg</image>
    			<artist>Noisecontrollers</artist>
    			<remixers></remixers>
    			<title>Revolution is here (original mix)</title>
    			<remix_title></remix_title>
    			<editor>Fusion records</editor>
    			<timer></timer>
    			<link1></link1>
    			<link2></link2>
    			<link3></link3>
    			<link4></link4>
    		</item>
    		<item id="65" ref="18" style="18" styleTitle=""  parent="" order="4" >
    			<image>deadmau5_some_chords.jpg</image>
    			<artist>Deadmau5</artist>
    			<remixers></remixers>
    			<title>Some Chords (Original mix)</title>
    			<remix_title></remix_title>
    			<editor>mau5trap</editor>
    			<timer>7:27</timer>
    			<link1></link1>
    			<link2></link2>
    			<link3></link3>
    			<link4></link4>
    		</item>
    	</playlist>
    En mettant simplement un espace, ça fonctionnerait, mais l'idée ne me plait guère et je tiens également à conserver les noeuds visibles, même si ceux-ci sont vides.

    Je me dis qu'il doit bien y avoir une astuce pour que ça fonctionne, un test ou autre au niveau du javascript. J'avais pensé à 'length' mais comme le noeud est toujours là, même vide, le résultat est toujours 1 ...

    J'espère que vous allez pouvoir m'aiguiller. Merci déjà. Bonne journée.

  2. #2
    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
    Le problème vient effectivement du fait que le noeud soit vide au sens du DOM. Comme tu l'as constaté, si tu mets un espace, le noeud n'est plus vide, il contient un textNode, en revanche, tel que tu l'écris, ta balise est équivalente à
    elle n'a donc pas de firstChild, d'où l'erreur.
    Je suis d'accord avec toi pour considérer que mettre un espace n'est pas forcément très élégant, du coup, je te conseillerais de tester l'existance du firstChild avant d'essayer de le récupérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var remix_title = tracks[t].getElementsByTagName("remix_title")[0].firstChild ? tracks[t].getElementsByTagName("remix_title")[0].firstChild.nodeValue : '';
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Salut Bovino,

    Un tout grand merci pour ta proposition qui s'avère être une très bonne solution. Plus aucune erreur en utilisant ce test.

    Merci beaucoup pour ton intervention.

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

Discussions similaires

  1. [XML] Comment détecter un noeud vide ?
    Par lnplnp dans le forum Modules
    Réponses: 1
    Dernier message: 31/03/2008, 17h47
  2. [AJAX] xml tester si un noeud est vide
    Par Alex35 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/06/2007, 17h32
  3. [AJAX] XML généré ok, responseXML.documentElement vide !
    Par LeCaméléon dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/12/2006, 09h53
  4. Réponses: 5
    Dernier message: 03/11/2006, 18h38
  5. Problème noeud vide en XML
    Par Booyakha dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2006, 15h53

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