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 :

createNode et createElement


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Par défaut createNode et createElement
    Bonjour à tous,

    je travaille sur une application qui modifie des fichiers XML. J'essaye d'ajouter un noeud (avec éventuellement des fils) dans un document XML.

    Voici comment je crée l'objet document :
    J'appelle tout d'abord la méthode manageBrowser() :
    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
     
    function manageBrowser()
    {
        var browser = window.navigator.userAgent.toLowerCase();
        var version = parseFloat(navigator.appVersion);
        var req;
        var treePartDiv = document.getElementById("treePart");
     
        if(browser.indexOf("msie")!=-1)
        {
      	if(version<7) req = new ActiveObject('Microsoft.XMLHTTP'); 
      	else req = new XMLHttpRequest();
        } // end if
        else
        {
      	if(browser.indexOf("firefox")!=-1) req = new XMLHttpRequest(); 
      	else 
      	{ 
      	    printInContentPart("Unsupported browser"); 
      	    printInTreePart("Unsupported browser"); 
      	    return null;
      	} // end else
        } // end else
        return req;
    } // end function manageBrowser
    Puis je récupère mon document depuis un serveur via la méhode openRemote()
    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
     
    function openRemote(requestString, status)
    {
        requestObj = manageBrowser();
        if(requestObj)
        {    	
        	// get the content of the file    	
        	requestObj.open('GET', requestString, false);
        	requestObj.send(null);
     
        	status = requestObj.status;
    	if(status!=200) return null;
    	return requestObj.responseXML;
        } // end if
        return null;
    } // end function open
    Tout cela fonctionne très bien

    Ensuite, je veux ajouter des éléments XML dans mon document (matérialisé par la variable xmlContent).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        var newElement = xmlContent.createElement("root");
     
        newElement.appendChild(newElementDescendantsElement.documentElement);
        newElement = currDocumentNode.parentNode.insertBefore(firefoxFirstChild(newElement),currDocumentNode);
    Note : newElementDescendantsElement sont des élements fils de newElement ; firefoxFirstChild() est une méthode qui renvoie le premier fils de l'élément passé en paramètre, en ignorant les #text insérés par FireFox.

    et là, ça marche presque
    C'est à dire que mon élément est bien inséré avec ses fils, mais un namespace vide est ajouté au premier élément (newElement).

    J'ai vu que pour éviter ce problème, il faut utiliser la méthode createNode(). Et là, ça ne marche plus du tout

    J'ai une erreur systématique comme quoi la méthode createNode() n'existe pas ...

    Quelqu'un a t-il une idée pour m'aider ?

    D'avance merci.


    Dr. Krusty.

  2. #2
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    createNode, n'a pas l'air d'être une méthode du DOM. Ce serait donc normal.

    edit : tu pourrais nous donner le code nécessaire, complet et réduit au minimum pour qu'on puisse tester? C'est à dire un simple document (x)html avec son code javascript et à coté les données xml.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Par défaut
    Bonjour franculo_caoulene,

    merci pour ta réponse. Poru ce qui est de vos passer le code, ça va être un peu compliqué
    En effet, mes scripts java (6 fichiers en tout) dialoguent avec une Servelt java ... celle-ci s'occupe de la création d'une partie des données. L'autre partie est sur un serveur de fichier (le fichier XML de base).

    Je ne sais pas trop comment faire pour vous transmettre tout ça ... tu peux m'aiguiller stp ?

  4. #4
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Donnes nous un truc du genre pour le code client :
    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
    63
    64
    65
    66
    67
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>modèle de test pour les applications XHR</title>
      <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
      <style type="text/css">
      </style>
    </head>
    <body>
      <div id="json"></div>
      <script type="text/javascript">
      var FC = {
        XHR: {
          requete: function() {
            if(window.XMLHttpRequest) { return new XMLHttpRequest(); }
            else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
            else { return false; }
          }(),
          obtenir: function(typeDeReponse, source, fonction) {
            var requete = FC.XHR.requete;
            if(!requete) { return false; }
            requete.onreadystatechange = function() {
              if(requete.readyState===4 && requete.status===200) {
                if(fonction) {
                  if(typeDeReponse==="xml") { 
                    fonction(FC.DOM.nettoyerDocument(requete.responseXML.documentElement)); 
                  } else { 
                    fonction(requete.responseText); 
                  }
                }
              }
            }
            requete.open("GET", source, true);
            requete.send(null);
          }
        },
        DOM: {
          nettoyerDocument: function(xmldoc) {
            var elements = xmldoc.getElementsByTagName("*");
            for(var i=0, imax=elements.length; i<imax; i++){
              var frerePrecedent = elements[i].previousSibling;
              var frereSuivant = elements[i].nextSibling;
              if(frerePrecedent && frerePrecedent.nodeType===3) { FC.DOM.nettoyerNoeud(frerePrecedent); }
              if(frereSuivant && frereSuivant.nodeType===3) { FC.DOM.nettoyerNoeud(frereSuivant); }
            }
            return xmldoc;
          },
          nettoyerNoeud: function(element) {
            if(!element.data.replace(/\s/g,'')) { element.parentNode.removeChild(element); }
          }
        }
      }
      /*FC.XHR.obtenir("xml", "xml.xml", function(xmldoc) {
        var contenu = xmldoc.getElementsByTagName("film")[0].childNodes[1];
        alert(contenu.data);
      });
      */
      FC.XHR.obtenir("text", "json.txt", function(json) {
        var obj = document.createElement("script");
        obj.setAttribute("type", "text/javascript");
        obj.text = "var o = "+ json +";";
        document.getElementById("json").appendChild(obj);
        alert(o[1].p1);
      });
      </script>
    </body>
    </html>
    Un peu comme tu nous a déjà donné ton code javascript, mais en mieux, car tout ce qui est nécessaire au test est sur un seul document. On n'aura plus qu'à faire un copier/coller. Concernant le XML, tu utilises Firefox, utilise donc l'onglet réseau de firebug pour nous donner la réponse xml qui est faite par ton serveur.

    J'insiste sur le fait de nous donner uniquement ce qui est nécessaire à l'illustration de ton problème.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Par défaut
    ok et pour les deux applications serveurs ? je fais comment ?

    Parce que moi je les lance dans mon tomcat ... mais toi comment tu pourras le tester si tu n'as pas ça ?

    (en attendant ta réponse, je commence à construire le fichier source comme tu me l'as montré).

  6. #6
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Si j'ai bien compris, tu souhaites intervenir sur le document XML servi par le serveur par le biais d'une requête XMLHttpRequest. Il suffit donc de regarder la réponse HTTP via l'extension firebug de firefox par exemple.

Discussions similaires

  1. createElement input de type file : pb d'upload de fichier
    Par firejocker dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 16/02/2006, 14h08
  2. document.createElement & event onclick
    Par tartanfion dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/01/2006, 18h33
  3. createElement('script')
    Par CR_Gio dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/09/2005, 19h49
  4. onmouseXXX et createElement
    Par hogan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/07/2005, 18h12
  5. Fonction "CreateElement" avec style sous Firebird
    Par protos69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/11/2004, 17h30

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