IE中的 XML DOM

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

一、创建XMLDOM对象

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

微软的三种版本:

1.MSXML2.DOMDocument.6.0 最可靠最新的版本

2.MSXML2.DOMDocument.3.0 兼容性较好的版本

3.MSXML2.DOMDocument    仅针对IE5.5之前的版本

这三个版本在不同的windows平台和浏览器下会有不同的支持,那么为了实现兼容,我们应该考虑这样操作:

从6.0->3.0->备用版本这条路线进行实现,如下:

  function createXMLDOM() {
   var version = [
   'MSXML2.DOMDocument.6.0',
   'MSXML2.DOMDocument.3.0',
   'MSXML2.DOMDocument'
   ];
   for (var i = ; i < version.length; i ++) {
   try {
   var xmlDom = new ActiveXObject(version[i]);
   return xmlDom;
   } catch (e) {
   //跳过
   }
   }
   throw new Error('您的系统或浏览器不支持MSXML!'); //循环后抛出错误
  }

二、载入XML,使用loadXML()和load()这两个方法可以分别载入XML字符串或XML文件:

1、

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

alert(xmlDom.xml);

2、

xmlDom.load('test.xml'); //载入一个XML文件

alert(xmlDom.xml);  //将其序列化

三、当你已经可以加载了XML,那么你就可以用之前学习的DOM来获取XML数据,比如标签内的某个文本。

1、

var user = xmlDom.getElementsByTagName('user')[0]; //获取<user>节点

alert(user.tagName); //获取<user>元素标签

alert(user.firstChild.nodeValue); //获取<user>里的值Lee

2、

DOM不单单可以获取XML节点,也可以创建。

var email= xmlDom.createElement('email');

xmlDom.documentElement.appendChild(email);

<script type="text/javascript">

        function createXMLDOM() {
var version = [
"MSXML2.DOMDocument6.0",
"MSXML2.DOMDocument3.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库"); } var xmlDom = createXMLDOM();
// xmlDom.loadXML("<root><user>cpu</user></root>");//加载XML字符串
// alert(xmlDom.xml); //序列化XML,打印字符串 xmlDom.load("abc.xml");
var user = xmlDom.getElementsByTagName("user")[0];
// alert(user.nodeType); var bbb = xmlDom.createElement('bbb');
var root = xmlDom.documentElement;
root.appendChild(bbb);
var bbbText = xmlDom.createTextNode('kkk');
bbb.appendChild(bbbText);
alert(xmlDom.xml); </script>

学习笔记

四、同步和异步

/*
//默认使用的异步加载
var xmlDom = createXMLDOM();
xmlDom.load('demo.xml');
alert(xmlDom.xml); //PS:在服务器端,默认使用的是异步加载。
//两个原因:1.在服务器端,使用的异步加载,load()还没有加载完毕,就去打印xmlDom.xml序列化的字符串 //使用同步加载
var xmlDom = createXMLDOM();
xmlDom.async = false; //同步设置false,异步设置true,默认是异步
xmlDom.load('demo.xml');
alert(xmlDom.xml); //使用同步记载延迟的PHP文件
var xmlDom = createXMLDOM();
xmlDom.async = false; //同步设置false,异步设置true,默认是异步
xmlDom.load('demo.php'); //加载这个PHP文件,使用了5秒,并且后面的代码没有执行
alert(xmlDom.xml); //5秒后才执行的 //PS:使用同步加载,如果延迟,那么整个浏览器就假死了。
*/ //我们应该用异步
var xmlDom = createXMLDOM();
xmlDom.async = true; //同步设置false,异步设置true,默认是异步 xmlDom.onreadystatechange = function () { //这个事件必须放在load()方法前面,意图先载入事件,再当load()执行的似乎才能激活
//alert(xmlDom);
if (xmlDom.readyState == 4) {
//xmlDom.parseError.errorCode 错误代号,没有错误是返回0
if (xmlDom.parseError.errorCode == 0) {
//alert(this === xmlDom); //this执行的是window
alert(xmlDom.xml);
} else {
throw new Error('错误行号:' + xmlDom.parseError.line +
'\n错误代号:' + xmlDom.parseError.errorCode +
'\n错误解释:' + xmlDom.parseError.reason);
}
}
} xmlDom.load('demo.xml'); //onreadystatechange比较特殊,里面的this表示 window而不是执行的object

JavaScript 【 IE中的XML DOM 】的更多相关文章

  1. Javascript 解析字符串生成 XML DOM 对象。

    Javascript 接收字符串生成 XML DOM 对象.实测对 Firefox .IE6 有效.可用于解析 ajax 的服务器响应结果,也可用于解析自定义字符串.​1. [代码]函数   ppt模 ...

  2. php中的XML DOM(10)

    1.PHP DOM (1) Php中的DOM跟javascript不一样,属性不用另外增加一个节点 2.主要类 DOMDocument :文档类 DOMNodeList :节点列表类 DOMNode ...

  3. php中的XML DOM(11)

    7.创建节点 在dom操作中,增删改操作必须要找父节点 1.DOMElement DOMDocument::createElement ( string $name [, string $value ...

  4. javascript快速入门25--浏览器中的XML

    打开XML 首先,直接从浏览器中打开XML文件,浏览器会对其进行格式良好性检查,如果不符合XML语法规范则显示出错,如果格式良好,再检查是否包含样式表(CSS或XSL),如果包含样式表,则用样式表格式 ...

  5. 【译】用jQuery 处理XML--浏览器中的XML与JavaScript

    用jQuery 处理XML--写在前面的话 用jQuery 处理XML-- DOM(文本对象模型)简介 用jQuery 处理XML--浏览器中的XML与JavaScript 用jQuery 处理XML ...

  6. 浏览器中的XML与JavaScript

    浏览器中的XML与JavaScript 在处理XML前,你需要在JavaScript中获取它.这一部分展示了一些不同的方法用来在JavaScript中获取XML并且对它进行处理. XML的节点类型 在 ...

  7. javascript中的XML

    IE下创建DOM并载入XML var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); xmldoc.load(url); //载入X ...

  8. javascript随机将第一个dom中的图片添加到第二个div中去

    javascript随机将第一个dom中的图片添加到第二个div中去,此代码的是一个简单的例子,将第一个div中的五张图片中,提取随机两张显示到第二个div中. <!DOCTYPE html P ...

  9. DOM和SAX是应用中操纵XML文档的差别

    查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下:          DOM.即Do ...

随机推荐

  1. Android漫游记(1)---内存映射镜像(memory maps)

    Android系统内核基于Linux2.6+内核,因此,其在进程内存管理方面的非常多机制和Linux是非常相像的.首先,让我们来看一个典型的Android进程的内存镜像(App进程和Native本地进 ...

  2. 初次使用Oracle

    这是我第一次写博客,主要是记录下自己这半个多月以来的学习笔记,以备以后可以随时查看. 首先就是安装Oracle的问题的,我系统是Win7 64位的,出现各种问题郁闷得不行,最终安装个Oracle102 ...

  3. javascript模式——Flyweight

    Flyweight是一种共享数据内存的模式. Flyweight模式是将一些公有属性从个人中剔除,放在共享的对象当中. 下面以一个项目实例,通过不断的改进,以显示Flyweight模式的优点. 现在我 ...

  4. ASP.NET属性之AssociatedControlID

    AssociatedControlID 是用在Asp.Net 中的 Label 控件上.给label控件关联一个ASP.NET的控件,在点击 这个 LABEL的时候,所关联的ASP.NET控件会获得焦 ...

  5. sql一些命令

    1.创建表 create table tSId ( tSid int identity(1,1) primary key, tSName varchar(10) check(len(tSName)&g ...

  6. asp.net 获取当前url地址

    设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...

  7. FMDB将对象放进数据库[二](使用runtime)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  8. 有趣的IT面试题

    一段看起来很简单C代码,预期结果是输出array数组. #include<stdio.h> #define TOTAL_ELEMENTS (sizeof(array) / sizeof(a ...

  9. logstash grok正则调试

    logstash 正则调试: nginx 配置: log_format main '$remote_addr [$time_local] "$request" '; logstas ...

  10. Nim游戏博弈

    Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...