Well after looking at the template thing you posted with your link it seems to me like PHP is used to create working XML. So i wonder why you are using AJAX here. Now could it be that you use appendChild() ? That function would simply add the XML again. It's not easy to tell if you are not showing the JavaScript code .. Still it simply depends on how you are importing the node you get from XMLHttpRequest() or responseXML Btw. importNode() is not working on all Browsers .. Below is a code snipped I use for my AJAX class in JavaScript to copy a node of one XML document (like from responseXML) into another. It works in IE6+ and all W3C compliant browsers. To make this work you will still have to make some ajustments. xml_obj.prototype.xml_import_node = function(node, to_node, all_children) { // cross browser importNode, NOTE: if toNode not specified it will be set to current root_element // appends node as a child to to_node // if all_children is true then all child nodes will be imported too /* NOTE TYPES: ELEMENT_NODE = 1; ATTRIBUTE_NODE = 2; TEXT_NODE = 3; CDATA_SECTION_NODE = 4; ENTITY_REFERENCE_NODE = 5; ENTITY_NODE = 6; PROCESSING_INSTRUCTION_NODE = 7; COMMENT_NODE = 8; DOCUMENT_NODE = 9; DOCUMENT_TYPE_NODE = 10; DOCUMENT_FRAGMENT_NODE = 11; NOTATION_NODE = 12; */ if (!node) return false; if (!this.DOC) this.DOC = document; if (!to_node.nodeType) { if (!this.XML) return false; try { to_node = this.XML.documentElement; this.DOC = this.XML; } catch(e) { return false; } } try { if (!node.nodeType) return false; switch (node.nodeType) { case 1: // new element var new_node = this.DOC.createElement(node.nodeName); if (node.attributes && (node.attributes.length > 0)) { // if it has attributes for (var count = 0; (count < node.attributes.length); count++) { this.xml_import_node(node.attributes[count], new_node); } } if (all_children && (node.childNodes && (node.childNodes.length > 0))) { // if child nodes var dump = null; for (var count = 0; (count < node.childNodes.length); count++) { this.xml_import_node(node.childNodes[count], new_node, true); } } to_node.appendChild(new_node); return new_node; break; case 2: // new attribute var name = node.nodeName; switch (node.nodeName.toLowerCase()) { case 'onload': case 'onunload': case 'onblur': case 'onclick': case 'ondblclick': case 'onfocus': case 'onkeydown': case 'onkeypress': case 'onkeyup': case 'onmousedown': case 'onmousemove': case 'onmouseout': case 'onmouseover': case 'onmouseup': var eval_code = 'to_node.'+node.nodeName.toLowerCase(); eval_code += ' = function() { '+node.nodeValue+' };'; eval(eval_code); break; case 'style': to_node.style.cssText = node.nodeValue; // IE FIX // no break case 'class': to_node.className = node.nodeValue; //IE FIX // no break default: to_node.setAttribute(node.nodeName, node.nodeValue); } return to_node; break; case 3: // new text_node case 4: // new cdata section case 8: // new comment node to_node.appendChild(this.DOC.createTextNode(node.nodeValue)); return to_node; break; case 5: // new entity reference case 6: // new entity node case 7: // new processing instruction case 9: // new document node case 10: // new document type node case 11: // new fragment node case 12: // new notation node return null; // not needed. if you want it then implement it break; default: return false; } } catch(e) { alert(e.message); return false; } } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php