小小千想和您聊一聊

当前位置: 首页> 技术分享> 软件测试常用文件之XML

软件测试常用文件之XML

  随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术。而XML技术一度成为存储和传输结构化数据的标准。

  一.IE中的XML

  在统一的正式规范出来以前,浏览器对于XML的解决方案各不相同。DOM2级提出了动态创建XML DOM规范,DOM3进一步增强了XML DOM。所以,在不同的浏览器实现XML的处理是一件比较麻烦的事情。

  1.创建XMLDOM对象

  IE浏览器是第一个原生支持XML的浏览器,而它是通过ActiveX对象实现的。这个对象,只有IE有,一般是IE9之前采用。微软当年为了开发人员方便的处理XML,创建了MSXML库,但却没有让Web开发人员通过浏览器访问相同的对象。

  var xmlDom = new ActiveXObject('MSXML2.DOMDocument')

  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之前的版本

  PS:这三个版本在不同的windows平台和浏览器下会有不同的支持,那么为了实现兼容,我们应该考虑这样操作:从6.0->3.0->备用版本这条路线进行实现。

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!');		//循环后抛出错误
}

  2.载入XML

  如果已经获取了XMLDOM对象,那么可以使用loadXML()和load()这两个方法可以分别载入XML字符串或XML文件。

xmlDom.loadXML('<root version="1.0"><user>Lee</user></root>');
alert(xmlDom.xml);

PS:loadXML参数直接就是XML字符串,如果想效果更好,可以添加换行符\n。.xml属性可以序列化XML,获取整个XML字符串。
xmlDom.load('test.xml');					//载入一个XML文件
alert(xmlDom.xml);

当你已经可以加载了XML,那么你就可以用之前学习的DOM来获取XML数据,比如标签内的某个文本。
	var user = xmlDom.getElementsByTagName('user')[0];	//获取<user>节点
	alert(user.tagName);								//获取<user>元素标签
	alert(user.firstChild.nodeValue);						//获取<user>里的值Lee

DOM不单单可以获取XML节点,也可以创建。
var email= xmlDom.createElement('email');
xmlDom.documentElement.appendChild(email);

  3.同步及异步

  load()方法是用于服务器端载入XML的,并且限制在同一台服务器上的XML文件。那么在载入的时候有两种模式:同步和异步。

  所谓同步:就是在加载XML完成之前,代码不会继续执行,直到完全加载了XML再返回。好处就是简单方便、坏处就是如果加载的数据停止响应或延迟太久,浏览器会一直堵塞从而造成假死状态。

  xmlDom.async = false; //设置同步,false,可以用PHP测试假死

  所谓异步:就是在加载XML时,JavaScript会把任务丢给浏览器内部后台去处理,不会造成堵塞,但要配合readystatechange事件使用,所以,通常我们都使用异步方式。

  xmlDom.async = true; //设置异步,默认

  通过异步加载,我们发现获取不到XML的信息。原因是,它并没有完全加载XML就返回了,也就是说,在浏览器内部加载一点,返回一点,加载一点,返回一点。这个时候,我们需要判断是否完全加载,并且可以使用了,再进行获取输出。

XML DOM中readystatechange事件
就绪状态	说明
1	DOM正在加载
2	DOM已经加载完数据
3	DOM已经可以使用,但某些部分还无法访问
4	DOM已经完全可以
PS:readyState可以获取就绪状态值

var xmlDom = createXMLDOM();
xmlDom.async = true;						//异步,可以不写
xmlDom.onreadystatechange = function () {		
	if (xmlDom.readyState == 4) {			//完全加载了,再去获取XML
		alert(xmlDom.xml);
	}
}
xmlDom.load('test.xml');					//放在后面重点体现异步的作用

上一篇:HTML5工具初识之网页编辑器

下一篇:软件测试基础

QQ技术交流群

千锋软件测试官方①群
858327674

加入群聊