/// /// //dnn.xml Namespace Type.registerNamespace('dnn.xml'); dnn.extend(dnn.xml, { pns: 'dnn', ns: 'xml', parserName: null, get_parserName: function() { if (this.parserName == null) this.parserName = this._getParser(); return this.parserName; }, createDocument: function() { if (dnn.xml.get_parserName() == 'MSXML') { var o = new ActiveXObject('MSXML.DOMDocument'); o.async = false; return new dnn.xml.documentObject(o); } else if (dnn.xml.get_parserName() == 'DOMParser') { return new dnn.xml.documentObject(document.implementation.createDocument("", "", null)); } else return new dnn.xml.documentObject(new dnn.xml.JsDocument()); }, init: function() { if (this.get_parserName() == 'DOMParser') { function __dnn_getNodeXml() { var oXmlSerializer = new XMLSerializer; //create a new XMLSerializer var sXml = oXmlSerializer.serializeToString(this); //get the XML string return sXml; //return the XML string } //todo: move to inline function Node.prototype.__defineGetter__("xml", __dnn_getNodeXml); } }, _getParser: function() { if (dnn.dom.browser.isType(dnn.dom.browser.InternetExplorer)) return 'MSXML'; else if (dnn.dom.browser.isType(dnn.dom.browser.Netscape,dnn.dom.browser.Mozilla)) return 'DOMParser'; else return 'JS'; } }); //dnn.xml.documentObject Object dnn.xml.documentObject = function(oDoc) { this._doc = oDoc; } dnn.xml.documentObject.prototype = { getXml: function() { //todo: use switch here if (dnn.xml.get_parserName() == 'MSXML') return this._doc.xml; else if (dnn.xml.get_parserName() == 'DOMParser') return this._doc.xml; else return this._doc.getXml(); //wish other browsers supported getters/setters }, loadXml: function(sXml) { if (dnn.xml.get_parserName() == 'MSXML') return this._doc.loadXML(sXml); else if (dnn.xml.get_parserName() == 'DOMParser') { // parse the string to a new doc var oDoc = (new DOMParser()).parseFromString(sXml, "text/xml"); // remove all initial children while (this._doc.hasChildNodes()) this._doc.removeChild(this._doc.lastChild); // insert and import nodes for (var i = 0; i < oDoc.childNodes.length; i++) this._doc.appendChild(this._doc.importNode(oDoc.childNodes[i], true)); } else return this._doc.loadXml(sXml); }, childNodes: function(iIndex) { if (this._doc.childNodes[iIndex] != null) return new dnn.xml.XmlNode(this._doc.childNodes[iIndex]); }, findNode: function(sNodeName, sAttr, sValue) { return this.childNodes(0).findNode(sNodeName, sAttr, sValue); }, childNodeCount: function() { return this._doc.childNodes.length; }, rootNode: function() { var oNode; for (var i=0; i' + sXml + ''); //need to guarantee a single root var aNodes = new Array(); for (var i=0; i