///
///
//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