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 :

[DOM] lire du xml avec du javascript


Sujet :

JavaScript

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    au fait, quelle est la difference entre res = xhr.responseXML.documentElement et res = xhr.responseXML ??

  2. #22
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    au fait, quelle est la difference entre res = xhr.responseXML.documentElement et res = xhr.responseXML ??
    xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre.

    svp, quel est le moyen le plus simple pour pouvoir afficher les info depuis le fichier xml, sachant que je ne suis pas un pro et que ca doit etre dynamique, car je n'est pas toujours que le titre en et fr, et qu'il peut y avoir 1 ou n auteurs...
    Le plus simple est la première solution que je t'ai proposé.
    Pour récupérer tous tes auteurs tu fais un getElementsByTagName("nom") et tu boucles sur la liste que tu récupères pour les afficher.
    Pour récupérer tous tes titres, tu boucles sur les childNodes du noeud titre en vérifiant que ces noeuds ne sont pas des noeuds textes (car comme spaffy te l'as dit plus haut, FF trouvera des noeuds textes vides alors qu'IE non)

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre
    Dans mon quoi, que dois je utiliser?

    voici un exemple tres courant de ce que je peux obtenir ds le fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <article>
      <titres>
        <en>titre en</en>
        <fr>titre fr</fr>
        <es>titre es</es>
      </titres>
      <auteurs>
        <nom>auteur 1</nom>
        <nom>auteur 2</nom>
      </auteurs>
    </article>
    Pour récupérer tous tes auteurs tu fais un getElementsByTagName("nom") et tu boucles sur la liste que tu récupères pour les afficher.
    Pour récupérer tous tes titres, tu boucles sur les childNodes du noeud titre en vérifiant que ces noeuds ne sont pas des noeuds textes (car comme spaffy te l'as dit plus haut, FF trouvera des noeuds textes vides alors qu'IE non)
    J'ai un peu de mal a copmprendre, pourras tu stp me donner un exemple concret des boucles??

    Merci encore une fois

  4. #24
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ca te sera surement plus profitable si tu reprenais au calme la manipulation du DOM depuis les bases

    Par exemple, tu peux commencer ici.

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    c cool, j'ai reussi pour les auteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nbr = response.getElementsByTagName("auteurs")[0].childNodes.length;
    html += "Auteur(s) : ";
    for(i = 0; i < nbr; i++)
    {
       html += response.getElementsByTagName("nom")[i].firstChild.nodeValue;
       if(i < nbr - 1) html += ", ";
    }
    cela te parait correcte??

    mais par contre je seche pour les titres
    pour demarrer, je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeValue);
    et il m'affiche NULL
    par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeName);
    il m'affiche bien 'en'

    un petit coup de main ???

  6. #26
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbr = response.getElementsByTagName("auteurs")[0].childNodes.length
    Attention à ca, suivant le navigateur tu n'auras pas le meme nombre. Le mieux est de faire directement nbr = response.getElementsByTagName("nom").length


    Code :

    alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeName);

    il m'affiche bien 'en'

    un petit coup de main ???
    Essaie en utilisant .data au lieu de .nodeValue

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Attention à ca, suivant le navigateur tu n'auras pas le meme nombre. Le mieux est de faire directement nbr = response.getElementsByTagName("nom").length
    OK, merci

    Essaie en utilisant .data au lieu de .nodeValue
    je devais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getElementsByTagName("titres")[0].childNodes[0].firstChild.nodeValue
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getElementsByTagName("titres")[0].childNodes[0].nodeValue
    et la, le tout marche bien

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    une petite precision:
    xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre.
    concretement, qu'elle est la difference? ds mon script je l'ai pas mis, qu'est ce que ca aurait change si je l'avais mis?

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour, je reviens encore vers vous car j'ai encore un tout petit souci

    ma requete ajax ne focntionne pas bien lorsque j'ai des resultats avec des ' ou ", savez vous comment palier a ce probleme?

    voici un bout de mon code :
    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
    function xhr_search_article(val1, val2, val3)
    {
    	if(val1 && val1.length > 3)
    	{
    		var xhr = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); // IE else Ff, Mozilla...
     
    		xhr.onreadystatechange = function()
    		{
    			if(xhr.readyState == 4)
    			{
    				if(xhr.status == 200)
    				{
    					var val_final = "<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
    					val_final += "<tr><td height='20' valign='top' align='right' colspan='2'><b><a href='javascript:;' onClick=\"open_close('" + val3 + "');\" title='Fermer'><span class='red'>x</span></a></b></td></tr>";
    					if(xhr.responseText != "")
    					{
    						var lines = xhr.responseText.split('\n');
    						for (var i = 0; i < lines.length; i++)
    						{
    							var line = lines[i].split('~');
    							for (var j = 0; j < 2; j++)
    							{
    								val_final += "<tr><td hight='16' width='258'><a href='javascript:;' class='linkMenu1' onClick=\"document.getElementById('" + val2 + "').value = '" + line[1] + "'; open_close('" + val3 + "');\">" + line[1] + "</a></td><td align='right' width='12'><a href='javascript:;' onClick=\"xhr_preview_article(" + line[0] + ", '" + line[1] + "'); open_close('" + val3 + "');\"><img src='../../img/loupe.gif' width='12' border='0'></a></td></tr>";
    								break;
    							}
    						}
    					}
    					val_final += "</table>";
     
    					document.getElementById(val3).style.display = '';
    					document.getElementById(val3).innerHTML = val_final;
    				}
    				else document.getElementById(val3).innerHTML = "Error code: " + xhr.status;
    			}
    		};
     
    		//Open the file, POST method
    		xhr.open("POST", "/admin/fridoc/articles/xhr_search_article.php?title=" + val1, true);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send();
    	}
    	else document.getElementById(val3).style.display = 'none';
    }
    et mon fichier php est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sel = mysql_query("SELECT id_article, titre FROM ...");
    mysql_close($con);
    $num = mysql_num_rows($sel);
    $i = 1;
    while($res = mysql_fetch_array($sel))
    {
    	$results .= "$res[id_article]~$res[title]";
    	if($i++ < $num) $results .= "\n";
    }
     
    echo $results;
    Merci encore une fois

  10. #30
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Tu peux nous montre un exemple de ce que tu reçois et de ce que tu aimerais recevoir ?
    Il faudrat :
    les enlever avec une regExp ?
    paramétrer ta table pour le ne pas avoir les quotyes ?

  11. #31
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    j'ai mis un echo addslashes($results); ds le fichier PHP mais ca regle pas le probleme.

    lorsque je commence a saisir pour afficher les resultats generes par ajax, j'ai un message d'erreur internet explorer : Constante chaine non terminee
    l'erreur vien de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val_final += "<tr><td hight='16' width='258'><a href='javascript:;' onClick=\"document.getElementById('mon_calque').value = '" + line[1] + "';\">" + line[1] + "</a></td></tr>";
    et c'est le premier line[1] qui bloque. la valeur de line[1] ds mon exemple est: test titre' " ) ( &
    j'ai mis different caracteres speciaux pour bien tester.
    ce qui bloque est le caractere " !!!

  12. #32
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    pour commencer manque un e

  13. #33
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val_final += '<tr><td height="16" width="258"><a href="javascript:;" onclick="document.getElementById('mon_calque').value =\'' + line[1] + '\';">' + line[1] + '</a></td></tr>'
    mais il y a une balise a ouvrante qui manque ...???

  14. #34
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    manque un e
    Petite faut d'inattention

    mais il y a une balise a ouvrante qui manque ...???
    Le changement entre les guillemets et cotes peux regler le probleme?
    par contre je ne vois pas trop la balise qui manque!!

  15. #35
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    dans le code fourni il y a une baliseil devrait y avoir aussi la balise ouvrante ...

    dans le même conteneur... elle ne doit pas être en dehors de la balise td !!!

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    elle y est la balise <a>:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val_final += "<tr><td hight='16' width='258'><a href='javascript:;' ...


    enfin pour resumer, comment faire pour que cette syntaxe javascript soit bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var valeur = "<a href=\"document.getElementById('id_champ').value = '" + val + "';\">mon lien</a>"
    où val = mon' titre " foireux !!

  17. #37
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    arf vaut mieux y voir comme ça que pas du tout :red:

    oki pour le a ...

    ton val contient des quotes ?

  18. #38
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    ton val contient des quotes ?
    oui, val peut etre : l'avenir du... "21e siecle" par exemple

  19. #39
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    fais en un html_entites en php ...
    ou un escape en javascript ...

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    fais en un html_entites en php
    crois mois, j'y ai pense mais là, vrmt je pete un plan, ca ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    $str = 'Un \'apostrophe\' en <strong>gras</strong>';
    ou $str = "Un 'apostrophe' en <strong>gras</strong>";
    // Affiche : Un 'apostrophe' en &lt;strong&gt;gras&lt;/strong&gt;
    echo htmlentities($str, ENT_QUOTES);
    ?>
    je ne sais pa pk mais cette fonction php ne fonctionne pas chez moi!!

    ou un escape en javascript
    Comment faire ca?

Discussions similaires

  1. Lire du xml avec shell
    Par rootdaoud dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/10/2007, 16h19
  2. [DOM] lire un fichier avec DOMDocument
    Par pimpmyride dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/05/2007, 15h54
  3. [XML] [XSLT] Lire du XML avec du XSL
    Par koudjo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/06/2006, 20h51
  4. Lire un xml avec javascript et generer code html ?
    Par zevince dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/04/2006, 11h45
  5. []générer et LIRE du xml avec vb: sélection d'un node
    Par chris21 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/09/2003, 13h14

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