初识XML
来源:互联网 发布:淘宝官方 编辑:程序博客网 时间:2024/05/16 17:16
初识XML
一.XML是啥
XML只可扩展标记语言。
XML被设计用来传输和存储数据。
类似HTML语言,XML在形式上与HTML别无二致,不过,在用途上HTML是页面渲染语言,浏览器通过解析HTML将页面呈现给用户,而XML是用来存储与传输数据的,例如XML文件本来就是一种数据文件,同时我们可以通过XMLHTTPRequest对象实现后台与服务器之间的交互。另外,HTML的标记是预先定义的,而XML的标记是用户自己定义的,当然XML也必须符合特定的语法规范。
二.XMLHttpRequest对象
XMLHttpRequest对象用于在后台与服务器交换数据。
它能够实现:
1.在不重新加载页面的情况下更新网页;
2.在页面已加载后从服务器请求数据;
3.在页面已加载后从服务器接收数据;
4.在后台向服务器发送数据;
注:所有主流的浏览器都实现了对XMLHttpRequest对象的支持。
创建XMLHttpRequest对象:xmlHttp=new XMLHttpRequest();
当然,旧版本的ie5、6使用ActiveX对象:xmlHttp=new ActiveXObject(‘Microsoft.XMLHTTP’);
实例:
<html><head><script type="text/javascript">var xmlhttp;function loadXMLDoc(url){xmlhttp=null;if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc. xmlhttp=new XMLHttpRequest(); }else if (window.ActiveXObject) {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }if (xmlhttp!=null) { xmlhttp.onreadystatechange=state_Change; xmlhttp.open("GET",url,true); xmlhttp.send(null); }else { alert("Your browser does not support XMLHTTP."); }}function state_Change(){if (xmlhttp.readyState==4) {// 4 = "loaded" if (xmlhttp.status==200) {// 200 = "OK" document.getElementById('A1').innerHTML=xmlhttp.status; document.getElementById('A2').innerHTML=xmlhttp.statusText; document.getElementById('A3').innerHTML=xmlhttp.responseText; } else { alert("Problem retrieving XML data:" + xmlhttp.statusText); } }}</script></head><body><h2>Using the HttpRequest Object</h2><p><b>Status:</b><span id="A1"></span></p><p><b>Status text:</b><span id="A2"></span></p><p><b>Response:</b><br /><span id="A3"></span></p><button onclick="loadXMLDoc('note.xml')">Get XML</button></body></html>
另外这里要提下,关于ie6及以下创建XMLHttpRequest对象,一般有三种版本——MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0。单独写一个ie对这三种版本的兼容:
function createXHR() { if (typeof XMLHttpRequest != 'undefined') { return new XMLHttpRequest(); } else if (typeof ActiveXObject != 'undefined') { var versions = [ 'MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp' ]; for (var i = 0; i < versions.length; i ++) { try { return new ActiveXObject(version[i]); } catch (e) { //跳过 } } } else { throw new Error('您的浏览器不支持XHR对象!'); }}var xhr = new createXHR();
三.XML解析器
所有主流的浏览器都内建了供读取和操作XML的XML解析器。
解析器把XML转换成XML DOM对象-可通过javascript操作的对象。
通俗地讲,解析器把XML载入内存,然后把它转换为可通过javascript访问的XML DOM对象。
ie浏览器:(通过Active对象实现)
ActiveXObject类型
XML版本字符串 说明
Microsoft.XmlDom 最初随同IE发布,不建议使用
MSXML2.DOMDocument 脚本处理而更新的版本,仅在特殊情况作为备份用
MSXML2.DOMDocument.3.0 在JavaScript中使用,这是最低的建议版本
MSXML2.DOMDocument.4.0 脚本处理时并不可靠,使用这个版本导致安全警告
MSXML2.DOMDocument.5.0 脚本处理时并不可靠,使用这个版本导致安全警告
MSXML2.DOMDocument.6.0 脚本能够可靠处理的最新版本
PS:在这六个版本中微软只推荐三种:
1.MSXML2.DOMDocument.6.0 最可靠最新的版本
2.MSXML2.DOMDocument.3.0 兼容性较好的版本
3.MSXML2.DOMDocument 仅针对IE5.5之前的版本
不同的ie版本可能有不同的兼容性,我们通过上面的三种方式进行浏览器兼容:
function createXMLDOM(){ var version=[ 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for(var i=0;i<version.length;i++){ try{ var xmlDom=new ActiveXObject(version[i]); return xmlDom; } catch(e){ //跳过 } } throw new Error('您的 系统或不支持MSXML');}
注:当然,上面的兼容操作不仅仅适用于ie678同样对ie9、10、11也是兼容的,只是当我们用alert(xmlDom)时ie9、10、11会报错,但alert(xmlDom.xml)不会报错。
火狐浏览器(firefox):
var xmlDoc=document.implementation.createDocument("","",null);xmlDoc.async="false";xmlDoc.load("note.xml");
1.首先创建一个空的XML文档对象;
2.然后设置加载方式为同步,即确保在文档完全加载之前解析器不会继续脚本的执行;
3.最后指定要加载的XML文档。
PS:createDocument()方法需要传递三个参数,命名空间,根标签名和文档声明,由于JavaScript管理命名空间比较困难,所以留空即可。文档声明一般根本用不到,直接null即可。命名空间和文档声明留空,表示创建XMLDOM对象不需要命名空间和文档声明。
PS:命名空间的用途是防止太多的重名而进行的分类,文档类型表明此文档符合哪种规范,而这里创建XMLDOM不需要使用这两个参数,所以留空即可。
PS:不管在同步或异步来获取load()方法只有Mozilla的Firefox才能支持,只不过新版的Opera也是支持的,其他浏览器则不支持。
非ie浏览器:
Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
如下:
txt="<bookstore><book>";txt=txt+"<title>Everyday Italian</title>";txt=txt+"<author>Giada De Laurentiis</author>";txt=txt+"<year>2005</year>";txt=txt+"</book></bookstore>";if (window.DOMParser) { parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml"); }else // Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt); }
注:微软的 XML 解析器与其他浏览器中的解析器之间,存在一些差异。微软的解析器支持 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都包含遍历 XML 树、访问插入及删除节点(元素)及其属性的函数。
我们发现,除了ie和火狐(firefox 通过document.implementation.createDocument创建XML DOM对象)可以加载XML文件(当然这里ie文件文本都能加载,而firefox只能加载文件),其他的浏览器均只能加载XML文本。
现在我们以加载XML文本进行浏览器兼容:
(function(){ window.sys={}; var ua=navigator.userAgent.toLowerCase(); var s; (s=ua.match(/firefox\/([\d.]+)/))?sys.firefox=s[1]: (s=ua.match(/rv:([\d.]+)/))?sys.ie=s[1]: (s=ua.match(/msie\s([\d.]+)/))?sys.ie=s[1]: (s=ua.match(/chrome\/(.*)opr\/([\d.]+)/))?sys.opera=s[2]: (s=ua.match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1]: (s=ua.match(/chrome\/([\d.]+)/))?sys.chrome=s[1]:0; if (/webkit/.test(ua)) sys.webkit = ua.match(/webkit\/([\d.]+)/)[1];})();//跨浏览器返回XML DOM对象function getXMLDOM(xmlStr){ var xmlDom=null; var xmlTemp=null; // alert(sys.ie); // alert(ActiveXObject); if(typeof window.DOMParser!='undefined' && !sys.ie){ xmlDom=(new DOMParser()).parseFromString(xmlStr,'text/xml'); var errors=xmlDom.getElementsByTagName('parsererror'); if(errors.length>0){ throw new Error('错误信息:'+errors[0].textContent); } } else if(window.ActiveXObject!='undefined'){ var version=[ 'MSXML2.DOMDocument6.0', 'MSXML2.DOMDocument3.0', 'MSXML2.DOMDocument' ]; for(var i=0;i<version.length;i++){ try{ xmlDom=new ActiveXObject(version[i]); xmlTemp=xmlDom; } catch(e){ //跳过 } } xmlDom=xmlTemp; xmlDom.loadXML(xmlStr); if(xmlDom.parseError!=0){ throw new Error('错误信息:'+xmlDom.parseError.reason); } // return xmlDom; } else{ throw new Error('您的系统或浏览器不支持XML DOM对象'); } return xmlDom;}//序列化XMLfunction serializerXML(xmlDom){ var xml=''; if(window.XMLSerializer!=undefined && !sys.ie){ xml=(new XMLSerializer()).serializeToString(xmlDom); }else if(xmlDom.xml!=undefined){ xml=xmlDom.xml; } else{ throw new Error('无法解析XML'); } return xml;}
- 初识XML
- XML初识
- 初识xml
- 初识XML
- 初识xml
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识XML
- 初识xml
- 初识XML
- xml初识
- 《XML初识》
- 破解Navicat for MySQL
- BZOJ 2809 [Apio2012]dispatching dfs序+左偏树
- 关于markdown window10系统安装报错
- OkHttp深入理解(2)RetryAndFollowUpInterceptor
- 离线赛20171008总结
- 初识XML
- 前端之路——jQuery第三课(利用已学的jq,制作一个失去焦点时,为空报错的表单验证)
- 自定义View+随机数点击变化
- android activity的全新解析
- Windows下如何硬盘安装Ubuntu
- html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
- 动画
- 安卓自定义View进阶-事件分发机制原理
- 【HDU1272】小希的迷宫(并查集)