日期:2014-05-16 浏览次数:20507 次
//--------------------------------xml封装---------------------------------------- /** * 新的xml对象方法 */ var XmlUtil = (function(){ var useMozDom = document.implementation && document.implementation.createDocument; //用于判断是否支持火狐浏览器 if (useMozDom) { //判断是否使用火狐浏览器,IE返回false,火狐返回true // 给FF Node对象原型添加xml属性 (该Node是火狐浏览器的内置对象) Node.prototype.__defineGetter__("xml", function() { return new XMLSerializer().serializeToString(this, "text/xml"); }); // 给FF Node对象原型添加text属性 Node.prototype.__defineGetter__("text", function() { var text = [], childNodes = this.childNodes; for (var i = 0, n; i < childNodes.length; i++) { n = childNodes[i]; text.push(n.hasChildNodes() ? n.text : n.nodeValue); } return text.join(); }); } return { /** * 创建xml对象 */ createXmlDom : useMozDom ? function() { return document.implementation.createDocument("", "", null); } : function() { var MSXMLVers = ["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument"]; for (var i = 0; i < MSXMLVers.length; i++) { try { return new ActiveXObject(MSXMLVers[i]); } catch(e) {} } }, /** * 加载xml字符串,返回新的XML DOM对象 */ loadXML : useMozDom ? function(sXml) { // 遗留: DOMParser对象,最初是局部变量,每次都new一个,后来发现firefox3.0会出问题,于是改用全局变量只new一次 return new DOMParser().parseFromString(sXml.replace(/\>\s+\</g, "\>\<"), "text/xml"); } : function(sXml) { var doc = this.createXmlDom(); doc.loadXML(sXml.replace(/\>\s+\</g, "\>\<")); return doc; }, /** * 深度复制node节点 */ clone : function(doc, node) { // 获得XML DOM对象 doc = doc.ownerDocument || doc; // 获取XML DOM对象根节点 node = node.documentElement || node; var root, attrs, nodes, e; // 创建根节点,设置节点属性 root = doc.createElement(node.nodeName); attrs = node.attributes; if (attrs.length > 0) { for (var i = 0; i < attrs.length; i++) { root.setAttribute(attrs[i].nodeName, attrs[i].nodeValue); } } // 添加子节点 if (node.hasChildNodes()) { nodes = node.childNodes; for (var i = 0, n; i < nodes.length; i++) { n = nodes[i]; switch (n.nodeType) { case 1: // 递归添加元素节点 e = this.clone(doc, n); root.appendChild(e); break; case 3: // 添加文本节点 e = doc.createTextNode(n.data); root.appendChild(e); break; case 4: // 添加CDATA节点 e = doc.createCDATASection(n.data); root.appendChild(e); break; default: break; } } } return root; } } })(); /******************************************************************************* 函数名: XmlDom 功能: 初始化XMLDOM对象 *******************************************************************************/ function XmlDom() { //生成DOM对象 return XmlUtil.createXmlDom(); } /******************************************************************************* 函数名: creatRequestNode 功能: 封装的XML的根节点 输入doc为dom对象 cmd为字符串 返回结果格式如下: <request cmd="RSM_CMD_GET_MEAS_DATA"> </request> *******************************************************************************/ function creatRequestNode(doc,cmd) { if(null == doc) { return null; } var requestNode = doc.createElement("request"); //创建xml根节点 if(null != cmd) { var requestAttribute = doc.createAttribute("cmd"); //创建属性节点cmd requestAttribute.value = cmd; //为属性节点赋值 requestNode.setAttributeNode(requestAttribute); //设置节点属性 } return requestNode; } /******************************************************************************* 函数名: crea