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 :

Mettre à jour une balise XML d'un XMLDoc à partir d'un contenu au format texte.


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Mettre à jour une balise XML d'un XMLDoc à partir d'un contenu au format texte.
    Bonjour,
    c'est pourtant quelque chose qui ne me parait pas sorcier. Je m'en sors du coté serveur en php, mais pas du côté client en javascript.
    Je voudrais que les éléments <mat> d'une variable XML soient remplacés par les éléments <mat> décrits dans une variable string. J'ai essayé du JQuery, de passer par une balise div et de recuperer son innerHTML, rien à faire. Soit j'ai des erreurs, soit j'ai des scories dans mon xml... Si quelqu'un sait faire, voilà le 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
    44
    45
    46
    47
    48
    49
    50
    51
     
    // renvoie un objet XML en string
    function XMLToString(xmlData)  {
        var xmlString;
        if (window.ActiveXObject){ //IE
            xmlString = xmlData.xml;
        }
        else{ // code for Mozilla, Firefox, Opera, etc.
            xmlString = (new XMLSerializer()).serializeToString(xmlData[0]);
        }
        return xmlString;
    }   
     
    //renvoie un string en un objet document XML
    function stringToXML(txt){
    	if (window.DOMParser){
    		parser=new DOMParser();
    		XMLDoc=parser.parseFromString(txt,"text/xml");
    	} else {
    	// Internet Explorer
    		XMLDoc=new ActiveXObject("Microsoft.XMLDOM");
    		XMLDoc.async=false;
    		XMLDoc.loadXML(txt);
    	}
    	return XMLDoc;
    }
     
    function affiche(quand, XMLDoc) {
    	XMLpartContent = XMLDoc.getElementsByTagName("ML") ;
    	partContent = XMLToString(XMLpartContent);
    	alert(quand+' \n'+partContent);
    }
     
    doc  = '<P><ML><mat><name>init1</name></mat><mat><name>init2</name></mat></ML></P>'; // 2 materiels 
    XMLDoc = stringToXML(doc) ;
    affiche('initalement', XMLDoc) ;
     
    newMat = '<mat><name>final1</name></mat><mat><name>final2</name></mat><mat><name>final3</name></mat>'; // 3 materiels 
     
     
    // ******************* Le code à pondre ***************
    // comment faire pour mettre à jour toutes les balises <mat> de mon XMLDoc avec le contenu de newMat
    // Je voudrais que XMLDoc soit structuré ainsi : <P><ML><label>label</label><mat><name>final1</name></mat><mat><name>final2</name></mat><mat><name>final3</name></mat></ML></P> 
     
    // ne fonctionne pas !!
    newXML = stringToXML(newMat) ;
    XMLDoc.documentElement.replaceChild(newXML, XMLDoc.getElementsByTagName("ML")[0]) ;
     
    // ****************************************************
     
    affiche('finalement', XMLDoc) ;

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut un nouvel essai qui ne fonctionne pas
    pourtant c'est très très proche de mon code php...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    newXML = stringToXML(newMat) ;
    var frag = XMLDoc.createDocumentFragment();
    frag.appendChild(newXML.documentElement) ;
    XMLDoc.getElementsByTagName("P")[0].replaceChild(frag, XMLDoc.getElementsByTagName("ML")[0]) ;

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Je réponds moi-même...
    2 erreurs par rapport à ma première ébauche de réponse :

    Le nouveau XML, il faut l'incorporer dans une balise englobante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newMat = '<ML><mat><name>final1</name></mat><mat><name>final2</name></mat><mat><name>final3</name></mat></ML>'; // 3 materiels
    Et surtout, le premier argument de replaceChild doit être de type contenu XML et non document XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    XMLDoc.documentElement.replaceChild(newXML, XMLDoc.getElementsByTagName("ML")[0]) ; // pas bon
    XMLDoc.documentElement.replaceChild(newXML.documentElement,XMLDoc.getElementsByTagName("ML")[0]) ; // voilà qui est mieux

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/04/2013, 00h32
  2. Réponses: 3
    Dernier message: 24/05/2012, 19h30
  3. mettre à jour une base de données depuis XML
    Par biks9 dans le forum Débuter
    Réponses: 3
    Dernier message: 20/03/2012, 02h01
  4. [MySQL] Mettre à jour une table mysql avec un fichier xml ou csv
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/02/2009, 08h56
  5. [JDOM] données un attribut à une balise xml
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 09/07/2004, 15h54

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