dom.loadXML() -- IE&FF 兼容问题(原文:http://www.ie0595.com/news/read.asp?id=152)
来源:互联网 发布:深度系统优化工具 编辑:程序博客网 时间:2024/05/21 11:12
一般来说,xml文件都是从外部载入的,那么我们如何只用js生成xml对象呢?下面的程序实现了这一点,只需要输入字符串形式的xml数据,就可以转换为xml对象,并且兼容firefox。
一、
<script>
if(!document.all)
XMLDocument.prototype.__defineGetter__("xml",function(){return new XMLSerializer().serializeToString(this)})
function createXml(str){
if(document.all){
var xmlDom=new ActiveXObject("Microsoft.XMLDOM")
xmlDom.loadXML(str)
return xmlDom
}
else
return new DOMParser().parseFromString(str, "text/xml")
}
xml=createXml(document.getElementById("x1").innerHTML)
</script>
二、
XMLDocument.prototype.LoadXML = function(xmlString)
{
var childNodes = this.childNodes;
for (var i = childNodes.length - 1; i >= 0; i--)
this.removeChild(childNodes[i]);
var dp = new DOMParser();
var newDOM = dp.parseFromString(xmlString, "text/xml");
var newElt = this.importNode(newDOM.documentElement, true);
this.appendChild(newElt);
}
{
var childNodes = this.childNodes;
for (var i = childNodes.length - 1; i >= 0; i--)
this.removeChild(childNodes[i]);
var dp = new DOMParser();
var newDOM = dp.parseFromString(xmlString, "text/xml");
var newElt = this.importNode(newDOM.documentElement, true);
this.appendChild(newElt);
}
===================================================
下面是自己项目的总结:
发现在firefox下不支持xmlDom.loadXML方法和xmlDom.transformNode方法。
经过测试找到了相应的解决办法,代码如下:
=================================================================
//如果是ie
if (window.ActiveXObject){
if (window.ActiveXObject){
// Load XML
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async = false;
xmlDom.loadXML(returnStr);
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async = false;
xmlDom.loadXML(returnStr);
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("pages/siteSpread/bpis_balance.xsl");
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("pages/siteSpread/bpis_balance.xsl");
// Transform
document.getElementById('bpisBalanceBlock').innerHTML = xmlDom.transformNode(xsl);
document.getElementById('bpisBalanceBlock').innerHTML = xmlDom.transformNode(xsl);
}else{//如果是firefox
if (document.implementation && document.implementation.createDocument){
if (document.implementation && document.implementation.createDocument){
// Load XML
var xmlDom = document.implementation.createDocument("","",null);
xmlDom.async = false;
var xmlDom = document.implementation.createDocument("","",null);
xmlDom.async = false;
//在FireFox中,XMLDOM只能载入处部XML文件,即FireFox下只支持XMLDom.load(xml文件),为此自己实现了一个方法
xmlDom.LoadXML(returnStr.replaceAll("\n","\n",""));
xmlDom.LoadXML(returnStr.replaceAll("\n","\n",""));
// Load XSL
var xsl = document.implementation.createDocument("","",null);
xsl.async = false;
xsl.load("pages/siteSpread/bpis_balance.xsl");
var xsl = document.implementation.createDocument("","",null);
xsl.async = false;
xsl.load("pages/siteSpread/bpis_balance.xsl");
// Transform
var xslProc = new XSLTProcessor();
xslProc.importStylesheet(xsl);
var viewNode = xslProc.transformToFragment(xmlDom, document);
document.getElementById('bpisBalanceBlock').innerHTML='';
document.getElementById("bpisBalanceBlock").appendChild(viewNode);
}
}
var xslProc = new XSLTProcessor();
xslProc.importStylesheet(xsl);
var viewNode = xslProc.transformToFragment(xmlDom, document);
document.getElementById('bpisBalanceBlock').innerHTML='';
document.getElementById("bpisBalanceBlock").appendChild(viewNode);
}
}
=================================================
自实现的支持firefox的LoadXML方法
XMLDocument.prototype.LoadXML = function(xmlString){
var childNodes = this.childNodes;
for (var i = childNodes.length - 1; i >= 0; i--)
this.removeChild(childNodes[i]);
var childNodes = this.childNodes;
for (var i = childNodes.length - 1; i >= 0; i--)
this.removeChild(childNodes[i]);
var dp = new DOMParser();
var newDOM = dp.parseFromString(xmlString, "text/xml");
var newElt = this.importNode(newDOM.documentElement, true);
this.appendChild(newElt);
}
var newDOM = dp.parseFromString(xmlString, "text/xml");
var newElt = this.importNode(newDOM.documentElement, true);
this.appendChild(newElt);
}
- dom.loadXML() -- IE&FF 兼容问题(原文:http://www.ie0595.com/news/read.asp?id=152)
- http://www.wlerp.com/News/detail.asp?id=22
- 51单片机引脚ALE/PROG/PSEN/EA/Vpphttp://www.how138.com/news.asp?id=576
- http://www.lihuasoft.net/news/show.php?id=4395
- Linux下通过WebShell反弹Shell的技巧(转;http://www.huachu.com.cn/news/newsinfo.asp?specialNewsID=1000001589)
- http://www.bbsxgb.com/?id=21
- asp.net控件开发基础 来源:http://www.clingingboy.com/blog/article.asp?id=258
- LoadXML的正确使用(原文:http://blog.sina.com.cn/s/blog_68530d690100mlcp.html)
- 如何删除realsched.exe(http://www.loveinbbs.com/dispbbs.asp?boardid=10&id=142)
- http://www.aogosoft.com/downpage.asp?mode=viewtext&id=163
- http://www.dev-club.com/club/bbs/showEssence.asp?id=26362
- 什么是Blog? (转自http://www.programfan.com/club/showbbs.asp?id=68106)
- OPC DCOM 配置 - 摘自工控网 http://www.gongkong.com/tech/detail.asp?id=284940
- 《网络机器人java编程指南》源代码下载http://www.goldenbg.com/article.asp?id=644
- matlab图形与声音http://www.image2003.com/book/open.asp?ID=2358
- 基本的浮动原理http://www.52css.com/article.asp?id=229
- C#中时间差的计算http://www.yaosansi.com/blog/article.asp?id=466
- 网页编程之验证码识别技术 http://www.meiyisi.com/article.asp?id=1751
- 换枪的过程
- 会员管理系统
- 英文VS2010安装中文版MSDN文档方法
- poj 1466 Girls and Boys (二分图最大独立集)
- TCP三次握手/四次挥手详解
- dom.loadXML() -- IE&FF 兼容问题(原文:http://www.ie0595.com/news/read.asp?id=152)
- poj1828
- 2011-10-17 sverlet的应用
- DoWhile0--华硕笔试题
- unix环境高级编程-3.10-文件共享
- 新概念英语 Lesson 19
- Hibernate性能优化
- 什么是数据验证
- 关于使用BASE64编码后的问题