js解析xml封装类

<script type="text/javascript">
	function XmlDom(){
		if(document.implementation&&document.implementation.createDocument){//w3c
			//第一个参数命名空间;第二个参数根节点
			this.xmlDom = document.implementation.createDocument("","",null);
			this.type = 'w3c';
		}else{//IE
			this.xmlDom = new ActiveXObject('Microsoft.XmlDom');
			
			this.type = 'IE';
		}
		
	}
	XmlDom.prototype = {
		loadFile:function(arg){//从本地或者远程载入xml文件
			/*
				arg:{
					url:加载路径,必选参数
					
					callback:加载完成后的回调函数,必选参数 
								function(xmlDom,XmlDom){}//xmlDom为得到的对象,使用w3c标准方法操作xml
														 //XmlDom 本身,可以使用扩展的getXml方法
								
					async:true为异步加载,false为同步加载,可选参数
				}
			*/
			arg.async = !!arg.async || true;

			if(this.type=='w3c'){//w3c
				if(arg.async){//异步加载
					var _this = this;
					this.xmlDom.onload = function(){
						if(this.documentElement.nodeName=='parsererror'){
							//w3c解析错误会用一个错误xml替换原始的xml
							throw new Error("XML Parse Error");
						}else{
							arg.callback(this,_this);
						}
					}
				}
				this.xmlDom.load(arg.url);//载入xml文件
				if(!arg.async){//同步加载
					arg.callback(this.xmlDom,this);
				}	
			}else if(this.type=='IE'){//IE
				
				var _this = this;
				if(arg.async){//异步加载
				
					this.xmlDom.onreadystatechange = function(){
						//这里面的this都指向window
						if(_this.xmlDom.readyState==4){
							if(_this.xmlDom.parseError.errorCode!==0){//解析有错
								throw new Error("XML Parse Error:"+_this.xmlDom.parseError.reason);
							}else{
								arg.callback(_this.xmlDom,_this);
							}
							
						}
					}
				}
				this.xmlDom.load(arg.url);
				if(!arg.async){
					arg.callback(this.xmlDom,this);
				}
			}
			
		},
		loadString:function(arg){
			/*
				arg:{
						s:xml字符串,必选参数
						callback:回调函数,必选参数
								 function(xmlDom,XmlDom){}
								 //xmlDom为得到的对象,使用w3c标准方法操作xml
								 //XmlDom 本身,可以使用扩展的getXml方法
				}
				
			*/
			
			
			if(this.type=='w3c'){
				var p = new DOMParser();
				var newDom=p.parseFromString(arg.s,"text/xml");
				if (newDom.documentElement.nodeName=="parsererror") {//有错
					throw new Error("XML Parse Error");
				}
				for (var i=0,n;i<newDom.childNodes.length;i++) {
					n=this.xmlDom.importNode(newDom.childNodes[i],true);
					//importNode用于把其它文档中的节点导入到当前文档中
					//true参数同时导入子节点
					this.xmlDom.appendChild(n);
				}
				arg.callback(this.xmlDom,this);
			}else if(this.type=='IE'){
				this.xmlDom.loadXML(arg.s);
				if (this.xmlDom.parseError.errorCode!==0) {
					throw new Error("XML Parse Error:"+this.xmlDom.parseError.reason);
				}
				arg.callback(this.xmlDom,this);
			}
		},
		getXml:function(xmlNode){//得到某个节点下面的xml文档
			if(this.type=='w3c'){
				var s= new XMLSerializer();
				return s.serializeToString(xmlNode,"text/xml");
			}else if(this.type=='IE'){
				
				return xmlNode.xml;
			}
		}
	};
</script>

<script type="text/javascript">
//示例
	var x = new XmlDom();
	var c = function(xmlDom,x){
				alert(xmlDom);
				//alert(x.getXml(xmlDom));
			};
	//x.loadFile({url:'test.xml',callback:c});
				
	var xmlStr="<root><book>知识分子的背叛</book><book>小逻辑"+
						"</book><book>不确定的科学和不确定的世界</book></root>";
	x.loadString({s:xmlStr,callback:c});
</script>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值