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

XML/XSL et SOAP Discussion :

Problème lorsque je parse du XML via JavaScript


Sujet :

XML/XSL et SOAP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [RESOLU] Problème lorsque je parse du XML via JavaScript
    Bonjour à toutes et à tous.

    Je viens vers vous car j'ai un problème lorsque je veux parser un flux XML avec du code JavaScript, le tout pour un moteur de recherche AJAX.

    Mon flux est généré par une page en PHP :

    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
     
    <?php
    include("../scr/cnx.php");
     
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Content-type: application/xml"); 
     
    $xml = "";
     
    //	Matériel :
    $xml .= "<materiel>";
     
    if(!empty($_REQUEST["query"])) {
    	$req_numser="select * from materiel where numser like '" . strtoupper($_REQUEST["query"]) . "%' and hidden=0 order by numser limit 5";
    	$row_numser = pg_query($req_numser);
    	$nb = pg_num_rows($row_numser);
    	$xml .= "<nb>" . $nb . "</nb>";
     
    	if ($nb > 0) {
    		while ($numser = pg_fetch_object($row_numser)) {
    			$xml .= "<item>" . $numser->numser . "</item>";
    		}
    	}
    } else {
    	$xml .= "<nb>0</nb>";
    }
    $xml .= "</materiel>\n";
    //
     
    echo utf8_encode($xml);
    ?>
    Ce flux contient donc les 5 premiers numéros de séries connus dans ma table et commençant par la valeur entrée dans le moteur de recherche.

    Je visualise bien ce flux dans Firebug (je développe sous Firefox).

    Voici mon parser JavaScript :

    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
     
    var materielResult = obj.responseXML.getElementsByTagName('materiel');
    document.getElementById('zoneResultats_large').innerHTML = '';
     
    //	Valeur du noeud <nb> :
    nb = materielResult.item(0).childNodes.item('nb').firstChild.nodeValue;
     
    if (nb > 0) {
    	affichage = 1;
    	// On définit la hauteur de la liste en fonction du nombre de résultats et de la hauteur de ligne
    	var hauteur = nb * 24; 
    	hauteur = (hauteur > 300) ? 300 : hauteur;
     
    	with(document.getElementById('zoneResultats_large').style) {
    		visibility = 'visible';
    		height = hauteur + 'px';
    	}
     
    	var li = document.createElement('li');
    	var texte = document.createTextNode('Matériel :');
    	li.style.textDecoration = "underline";
    	li.style.fontWeight = "bold";
    	li.appendChild(texte);
    	document.getElementById('zoneResultats_large').appendChild(li);
     
    	for (var i = 1; i <= nb; i++) {
    		materiel = materielResult.item(0).childNodes.item(i).firstChild.nodeValue; 
    		var li = document.createElement('li');
    		var a = document.createElement('a');
    		var texte = document.createTextNode(materiel);
    		a.appendChild(texte);
    		a.setAttribute('href', '#');	// A MODIFIER !!!
    		a.setAttribute('title', materiel);
    		li.appendChild(a);
    		document.getElementById('zoneResultats_large').appendChild(li);
    	}
    } else {
    	affichage = 0;
    }
    C'est magnifique, j'en pleure de joie car ça me fait une belle "liste déroulante" avec mes 5 résultats.

    ---

    Là où se complique, c'est parce que je veux effectuer cette recherche sur 2 tables : la première étant la table du matériel, et la deuxième étant la table des RMA effectués sur ce matériel.

    Dans mon fichier PHP, je procède exactement de la même manière pour ajouter dans le flux XML les résultats de ma 2e requête, sauf que je crée un nouveau noeud <rma> au lieu de <materiel>. Je les vois bien en visualisant dans Firebug.

    Par contre, j'ai une belle erreur JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    materielResult.item(0) is null
    [Break on this error] nb = materielResult.item(0).firstChild.nodeValue;
    Voici mon flux avec 1 seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <materiel><nb>5</nb><item>82654061043</item><item>8265U061041</item><item>8265U061042</item><item>8265U061043
    </item><item>8265U061044</item></materiel>
    Et celui avec les 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <materiel><nb>5</nb><item>82654061043</item><item>8265U061041</item><item>8265U061042</item><item>8265U061043
    </item><item>8265U061044</item></materiel>
    <rma><nb>1</nb><item>883878</item></rma>
    Je sais, mon flux est dégueulasse à regarder car je n'ai pas mis de retour à la ligne ni de tabulation, mais c'est pour éviter que le parser interprète chaque retour chariot comme un item "undefined" :/

    Je sèche depuis hier dessus. Je ne comprends pas pourquoi mon bout de JavaScript n'arrive plus à trouver le premier item du noeud <materiel>.

    Auriez-vous une solution ou quelques pistes s'il vous plaît ? D'avance merci et j'espère avoir posté dans le bon forum car je ne savais pas s'il fallait poster dans le forum XML, JavaScript ou AJAX

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,
    En remettant ton flux en perspective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <materiel>
          <nb>5</nb>
          <item>82654061043</item>
          <item>8265U061041</item>
          <item>8265U061042</item>
           <item>8265U061043
           </item><item>8265U061044</item>
    </materiel>
    <rma> 
         <nb>1</nb>
         <item>883878</item>
    </rma>
    ... et bien il n'y a plus d'élément racine , donc ce n'est plus un document XML conforme. Ajoutes en un, même s'il ne te sert 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
     
    <developpez>
       <materiel>
             <nb>5</nb>
             <item>82654061043</item>
             <item>8265U061041</item>
             <item>8265U061042</item>
              <item>8265U061043
              </item><item>8265U061044</item>
       </materiel>
       <rma> 
            <nb>1</nb>
            <item>883878</item>
       </rma> 
    </developpez>
    Bon dev,


    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    ... et bien il n'y a plus d'élément racine , donc ce n'est plus un document XML conforme. Ajoutes en un, même s'il ne te sert pas
    Mouarf, ça marche maintenant. Très certainement une erreur de débutant, mais c'est normal, car je débute en XML.

    Merci pour la réponse

    A+

Discussions similaires

  1. [Génération XML en JavaScript] Problème avec l'attribut xmlns
    Par LeHibou dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 11/08/2008, 16h30
  2. [AJAX] xml + php / javascript,problèmes de compréhension
    Par AsQuel dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/11/2006, 22h25
  3. [AJAX] Passer des donnees format xml via un POST
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/08/2006, 16h09
  4. Réponses: 7
    Dernier message: 23/07/2006, 20h01
  5. Problème d'exécution d'un ActiveX via un Javascript
    Par xjinh dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/10/2005, 14h08

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