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:
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) ; |
un nouvel essai qui ne fonctionne pas
pourtant c'est très très proche de mon code php...
Code:
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]) ; |