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.