首先,定义一个全局变量用于识别当前浏览器是否IE
全局变量
var _isIe = navigator.appName == "Microsoft Internet Explorer" ? true : false;
var _isIe = navigator.appName == "Microsoft Internet Explorer" ? true : false;
针对xml对象在Firefox里的不同属性进行转换,统一接口
if
(
!
_isIe)
{
var ex;
XMLDocument.prototype.__proto__.__defineGetter__("xml" ,function (){
try {
return new XMLSerializer().serializeToString(this);
} catch (ex){
var d = document.createElement("div");
d.appendChild(this.cloneNode( true ));
return d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__("xml", function (){
try {
return new XMLSerializer().serializeToString(this);
} catch (ex){
var d = document.createElement("div");
d.appendChild(this.cloneNode(true));
return d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__("text", function (){
return this.firstChild.textContent;
});
Element.prototype.__proto__.__defineGetter__("text", function (){
return this.textContent;
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (XPath){
alert("selectSingleNode");
var x = this.selectNodes(xpath);
alert(x);
alert(x.length);
if ( !x || x.length < 1 ) return null;
return x[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){
alert("selectNodes");
var xpe = new XPathEvaluator();
alert("1");
var nsResolver = xpe.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement);
alert("2");
var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
alert("3");
var found = [];
var res;
while (res = result.iterateNext())
found.push(res);
return found;
}
Node.prototype.transformNode = function (oXslDom) {
var oProcessor = new XSLTProcessor();
oProcessor.importStylesheet(oXslDom);
var oResultDom = oProcessor.transformToDocument(this);
var sResult = oResultDom.xml;
if (sResult.indexOf(" <transformiix:result") > -1) {
sResult = sResult.substring(sResult.indexOf("> ") + 1, sResult.lastIndexOf(" <"));
}
return sResult;
};
}
var ex;
XMLDocument.prototype.__proto__.__defineGetter__("xml" ,function (){
try {
return new XMLSerializer().serializeToString(this);
} catch (ex){
var d = document.createElement("div");
d.appendChild(this.cloneNode( true ));
return d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__("xml", function (){
try {
return new XMLSerializer().serializeToString(this);
} catch (ex){
var d = document.createElement("div");
d.appendChild(this.cloneNode(true));
return d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__("text", function (){
return this.firstChild.textContent;
});
Element.prototype.__proto__.__defineGetter__("text", function (){
return this.textContent;
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (XPath){
alert("selectSingleNode");
var x = this.selectNodes(xpath);
alert(x);
alert(x.length);
if ( !x || x.length < 1 ) return null;
return x[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){
alert("selectNodes");
var xpe = new XPathEvaluator();
alert("1");
var nsResolver = xpe.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement);
alert("2");
var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
alert("3");
var found = [];
var res;
while (res = result.iterateNext())
found.push(res);
return found;
}
Node.prototype.transformNode = function (oXslDom) {
var oProcessor = new XSLTProcessor();
oProcessor.importStylesheet(oXslDom);
var oResultDom = oProcessor.transformToDocument(this);
var sResult = oResultDom.xml;
if (sResult.indexOf(" <transformiix:result") > -1) {
sResult = sResult.substring(sResult.indexOf("> ") + 1, sResult.lastIndexOf(" <"));
}
return sResult;
};
}
相关函数如下:
相关函数
/// <summary>创建xml对象</summary>
/// <returns>返回创建成功的xml对象</returns>
function createDomDoc()
{
if(_isIe)
{
var signatures=["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","Microsoft.XmlDom"];
for(var i=0;i<signatures.length;i++){try{ this.domDoc=new ActiveXObject(signatures[i]);return this.domDoc;}catch(e){}}
return null;
}
else
{
return document.implementation.createDocument("","",null);
}
}
/// <summary>根据xpath取符合条件的节点集合</summary>
/// <param name="domDoc">xml对象</param>
/// <param name="xpath">xpath语句</param>
/// <returns>返回符合条件的节点集合</returns>
function selectNodes(domDoc, xpath)
{
if (_isIe)
return domDoc.selectNodes(xpath) ;
else{
var aNodeArray = new Array();
var xPathResult = domDoc.evaluate(xpath, domDoc, domDoc.createNSResolver(domDoc.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
if (xPathResult){
var oNode = xPathResult.iterateNext() ;
while(oNode){
aNodeArray[aNodeArray.length] = oNode ;
oNode = xPathResult.iterateNext();
}
}
return aNodeArray ;
}
}
/// <summary>返回xml对象的内容字符串</summary>
/// <param name="domDoc">xml对象</param>
/// <returns>返回xml对象的内容字符串</returns>
function lookXml(domDoc){
if(_isIe){return domDoc.xml;}
else{
var serializer=new XMLSerializer();
var xml=serializer.serializeToString(domDoc);
return xml;
}
}
/// <summary>根据url异步加载xml对象</summary>
/// <param name="domDoc">传入创建好的xml对象</param>
/// <param name="url">xml文件存在的地址(有人说此方法只能访问本服务器上的文件,尚未验证)</param>
/// <param name="fun">加载成功后执行的函数名(带一个xml对象参数)</param>
/// <returns>无</returns>
function loadByUrl(domDoc, url, fun)
{
domDoc.async = true;
if(_isIe)
{
domDoc.onreadystatechange = function()
{
//alert(domDoc.readyState);
if (domDoc.readyState == 4)
{
//alert("readyState载入完毕!");
fun(domDoc);
}
}
}
else
{
domDoc.onload = function(success)
{
if(success)
{
//alert("onload加载完成。");
fun(domDoc);
}
}
}
domDoc.load(url);
}
/// <summary>获取节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <returns>返回节点内的值</returns>
function getText(obj)
{
return obj.firstChild.nodeValue;
}
/// <summary>获取节点属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <returns>返回节点指定属性的值</returns>
function getKey(obj, key)
{
var o=obj.getAttribute(key);
return o==null?"":o;
}
/// <summary>设置节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="text">要写入节点的内容</param>
/// <returns>无</returns>
function setText(obj, text)
{
obj.firstChild.nodeValue=text;
}
/// <summary>设置节点的属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <param name="text">要写入节点属性的内容</param>
/// <returns>无</returns>
function setKey(obj, key, text)
{
obj.setAttribute(key,text);
}
/// <summary>创建xml对象</summary>
/// <returns>返回创建成功的xml对象</returns>
function createDomDoc()
{
if(_isIe)
{
var signatures=["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","Microsoft.XmlDom"];
for(var i=0;i<signatures.length;i++){try{ this.domDoc=new ActiveXObject(signatures[i]);return this.domDoc;}catch(e){}}
return null;
}
else
{
return document.implementation.createDocument("","",null);
}
}
/// <summary>根据xpath取符合条件的节点集合</summary>
/// <param name="domDoc">xml对象</param>
/// <param name="xpath">xpath语句</param>
/// <returns>返回符合条件的节点集合</returns>
function selectNodes(domDoc, xpath)
{
if (_isIe)
return domDoc.selectNodes(xpath) ;
else{
var aNodeArray = new Array();
var xPathResult = domDoc.evaluate(xpath, domDoc, domDoc.createNSResolver(domDoc.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
if (xPathResult){
var oNode = xPathResult.iterateNext() ;
while(oNode){
aNodeArray[aNodeArray.length] = oNode ;
oNode = xPathResult.iterateNext();
}
}
return aNodeArray ;
}
}
/// <summary>返回xml对象的内容字符串</summary>
/// <param name="domDoc">xml对象</param>
/// <returns>返回xml对象的内容字符串</returns>
function lookXml(domDoc){
if(_isIe){return domDoc.xml;}
else{
var serializer=new XMLSerializer();
var xml=serializer.serializeToString(domDoc);
return xml;
}
}
/// <summary>根据url异步加载xml对象</summary>
/// <param name="domDoc">传入创建好的xml对象</param>
/// <param name="url">xml文件存在的地址(有人说此方法只能访问本服务器上的文件,尚未验证)</param>
/// <param name="fun">加载成功后执行的函数名(带一个xml对象参数)</param>
/// <returns>无</returns>
function loadByUrl(domDoc, url, fun)
{
domDoc.async = true;
if(_isIe)
{
domDoc.onreadystatechange = function()
{
//alert(domDoc.readyState);
if (domDoc.readyState == 4)
{
//alert("readyState载入完毕!");
fun(domDoc);
}
}
}
else
{
domDoc.onload = function(success)
{
if(success)
{
//alert("onload加载完成。");
fun(domDoc);
}
}
}
domDoc.load(url);
}
/// <summary>获取节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <returns>返回节点内的值</returns>
function getText(obj)
{
return obj.firstChild.nodeValue;
}
/// <summary>获取节点属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <returns>返回节点指定属性的值</returns>
function getKey(obj, key)
{
var o=obj.getAttribute(key);
return o==null?"":o;
}
/// <summary>设置节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="text">要写入节点的内容</param>
/// <returns>无</returns>
function setText(obj, text)
{
obj.firstChild.nodeValue=text;
}
/// <summary>设置节点的属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <param name="text">要写入节点属性的内容</param>
/// <returns>无</returns>
function setKey(obj, key, text)
{
obj.setAttribute(key,text);
}