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 :

Charger un tableau XML dans HTML


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut Charger un tableau XML dans HTML
    Bonjour, bonsoir !

    Voilà, j'ai deux fichiers XML qui contiennent chacun un catalogue de CD, comme ceci :
    Code XML : 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <CATALOG>
    	<CD>
    		<TITLE>--</TITLE>
    		<ARTIST>--</ARTIST>
    		<COUNTRY>--</COUNTRY>
    		<COMPANY>--</COMPANY>
    		<PRICE>--</PRICE>
    		<YEAR>--</YEAR>
    	</CD>
    	<CD>
    		<TITLE>--</TITLE>
    		<ARTIST>--</ARTIST>
    		<COUNTRY>--</COUNTRY>
    		<COMPANY>--</COMPANY>
    		<PRICE>--</PRICE>
    		<YEAR>--</YEAR>
    	</CD>
    </CATALOG>
    Je précise que ces deux fichiers n'ont pas le même nombre de CD.

    Dans une page HTML, je veux pouvoir faire apparaître ces deux catalogues, à l'aide d'une liste déroulante. Voilà ce que j'ai dans ce fichier HTML :
    Code HTML : 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
    <!DOCTYPE html>
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
     
    <form name="formulaire">
    	<select name="select">
    		<option value="cd_catalog.xml">Catalogue 1</option>
    		<option value="cd_catalog2.xml">Catalogue 2</option>
    	</select>
    	<input type="button" value="Regarder" onclick="verification()" />
    	<input type="text" name="result" />
    </form>
     
    <script>        
            function verification()
            {
                    formulaire.result.value = formulaire.select.value;
            
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET",formulaire.result.value,false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML; 
     
    document.write("<table border='1'>");
    var x=xmlDoc.getElementsByTagName("CD");
    for (i=0;i<x.length;i++)
      { 
      document.write("<tr><td>");
      document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
      document.write("</td><td>");
      document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
      document.write("</td></tr>");
      }
    document.write("</table>");
     
    }
    </script>
     
    </body>
    </html>

    Alors, ça marche, mais le problème, c'est que ça efface la page quand je charge le tableau.
    Est ce qu'il y a moyen de contourner le problème ?

    Je vous remercie !

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    c'est quoi ça ?
    A+JYT

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    Est ce qu'il y a moyen de contourner le problème ?
    OUI et pour commencer ne pas utiliser document.write dont tu connais l'effet.

    Il existe les méthodes de construction du DOM tel que createElement, createNodeText, appendChild, insertRow ou autre insertCell.

  4. #4
    Membre confirmé
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    Il existe les méthodes de construction du DOM tel que createElement, createNodeText, appendChild, insertRow ou autre insertCell.
    Laquelle serai la plus approprié, et comment l'utiliser ?

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Comme tu traites des données tabulaire je dirais à priori toutes .
    exemple simple
    Code html : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>Création TABLE</title>
    <style>
    table td{
      border:1px solid red;
    }
    </style>
    </head>
    <body>
    <div id="destination"></div>
    <script>
    // endroit on l'on va ajouter la TABLE
    var oDest = document.getElementById('destination');
    // Eléments manipulés
    var oText, oCell, oRow, oTable = document.createElement('TABLE');
    var i, nb = 10;
    for (i=0; i <nb; i++){
      oRow  = oTable.insertRow();
      oCell = oRow.insertCell();
      oText = document.createTextNode( i);
      oCell.appendChild( oText);
    }
    // ajout TABLE créée
    oDest.appendChild( oTable);
    </script>
    </body>
    </html>

  6. #6
    Membre confirmé
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    Je te remercie !

    Mais, comment puis-je insérer deuxième colonne ?
    [EDIT] J'ai un autre problème. Sans ajouter de deuxième colonne, mon code est :
    Code HTML et JS : 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
    63
    64
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>Création TABLE</title>
    <style>
    table td{
      border:1px solid red;
    }
    </style>
    </head>
    <body>
     
     
    <form name="formulaire">
    	<select name="select">
    		<option value="cd_catalog">Catalogue 1</option>
    		<option value="cd_catalog2">Catalogue 2</option>
    	</select>
    	<input type="button" value="Regarder" onclick="verification()" />
    	<input type="text" name="result" />
    </form>
     
     
    <div id="destination"></div>
     
     
    <script>
    function verification()
    	{
    		formulaire.result.value = formulaire.select.value+".xml";
     
    	if (window.XMLHttpRequest)
    	{// code for IE7+, Firefox, Chrome, Opera, Safari
    	xmlhttp=new XMLHttpRequest();
    	}
    	else
    	{// code for IE6, IE5
    	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	xmlhttp.open("GET",formulaire.result.value,false);
    	xmlhttp.send();
    	xmlDoc=xmlhttp.responseXML; 
     
     
    	// endroit on l'on va ajouter la TABLE
    	var oDest = document.getElementById('destination');
    	// Eléments manipulés
    	var oText, oCell, oRow, oTable = document.createElement('TABLE');
    	var x=xmlDoc.getElementsByTagName("CD");
    	for (i=0;i<x.length;i++) {
    	oRow  = oTable.insertRow();
    	oCell = oRow.insertCell();
    	oText = document.createTextNode("n°"+i+" "+x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
     
    	oCell.appendChild( oText);
    	}
    	// ajout TABLE créée
    	oDest.appendChild( oTable);
    }
     
    </script>
    </body>
    </html>

    Ca marche bien. Mais quand on change de catalogue avec le select, le tableau se "colle" en dessous du premier, alors que j'aimerai qu'il le remplace.

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Il te suffit de dupliquer l'insertion d'une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (i=0; i <nb; i++){
      // création d'une ligne
      oRow  = oTable.insertRow();
      // 1st cellule
      oCell = oRow.insertCell();
      oText = document.createTextNode( 'ligne ' +i +' colonne 1');
      oCell.appendChild( oText);
      // 2nd cellule
      oCell = oRow.insertCell();
      oText = document.createTextNode( 'ligne ' +i +' colonne 2');
      oCell.appendChild( oText);
    }
    oDest.appendChild( oTable);
    Concernant la deuxième partie il te suffit de vider l'élément destination de ses enfants avant injection de la nouvelle TABLE.
    Comment supprimer tous les enfants d'un noeud en utilisant les méthodes DOM ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    Merci, merci beaucoup !
    J'ai cependant un dernière question, comment puis-je faire un colspan ?

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    ...comment puis-je faire un colspan ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oCell = oRow.insertCell();
    oCell.setAttribute('colspan', 2);

  10. #10
    Membre confirmé
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    Parfait, je te remercie, et je met la discussion en Résolu ! Merci encore !

  11. #11
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ou mieux, en manipulant directement les propriétés de l'objet JavaScript plutôt que ses attributs HTML :
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2007, 17h13
  2. [debutant]charger un tableau *.xls dans VB6
    Par styliebeuf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/11/2006, 11h48
  3. Réponses: 2
    Dernier message: 28/09/2006, 09h48
  4. Réponses: 9
    Dernier message: 27/06/2006, 21h48
  5. intégration XML dans HTML
    Par jem27 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 15/06/2006, 15h58

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