日期:2014-05-16 浏览次数:20594 次
//--------------------------------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