一 IE中的XML

  //1.创建XMLDOM对象
 //创建XMLDOM对象
var xmlDom = new ActiveXObject("MSXML2.DOMDocument.6.0"); //IE9之前使用
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]); //IE中的
return xmlDom;
}catch(e){
//跳过
}
}
throw new Error("您的系统或浏览器不支持MSXML!");
}

  

 //2.载入XML
    //若已经取得了XMLDOM对象,可以使用loadXML()和load()这两个方法可以分别载入XML字符串或XML文件。

 var xmlDom = createXMLDOM();
xmlDom.loadXML("<root>\n<user>cc</user>\n</root>"); //loadXML()加载内部文件
alert(xmlDom.xml); //.xml属性可以序列化XML,获取整个XML字符串。
var user = xmlDom.getElementsByTagName("user")[0];
alert(user.tagName);
alert(user.innerHTML); //innerHTML不是标准DOM
alert(user.firstChild.nodeValue); var xmlDom02 = createXMLDOM();
xmlDom02.load("xml01.xml"); //load()加载外部文件
var bbb = xmlDom02.createElement("bbb");
var root = xmlDom02.documentElement;
var bbbText = xmlDom02.createTextNode("kkk");
bbb.appendChild(bbbText);
root.appendChild(bbb);
alert(xmlDom02.xml);

  //3.服务器端加载xml文件

    //使用同步加载文件

    

 xmlDom.async = false;
xmlDom.load("xml01.xml");
//同步加载, 同步设置false,异步设置true,默认是异步
4 alert(xmlDom.xml);

    //使用异步加载文件

 xmlDom.async = true;  //异步加载
xmlDom.load("xml01.xml");
alert(xmlDom.xml);

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

异步加载:在加载XML时,JavaScript会把任务丢给浏览器内部后台去处理,不会造成堵塞,需要配合readystatechange事件使用
通常使用异步方式 xmlDom.async = true.

                 xmlDom.onreadystatechange = function(){
if (xmlDom.readyState == 4) { //完全加载了,再去获取XML
// alert(xmlDom.xml); //这里的xmlDom不能是this,xmlDom是Object,此时的this是Windown。也不能够用IE的事件处理函数,因为ActiveX控件为了预防安全性问题。 //错误解析
if (xmlDom.parseError == 0) {
alert(xmlDom.xml);
}else{
throw new Error(
"错误行号:" + xmlDom.parseError.line +
"\n 错误代号:" + xmlDom.parseError.errorCode +
"\n 错误解析:" + xmlDom.parseError.reason);
} };
}
xmlDom.load("xml01.xml");

  ps:虽然可以通过XML DOM文档加载XML文件,但公认的还是XMLHttpRequest对象比较好。

  解析错误

二 DOM2中的XML

  DOM2的XML DOM对象是不支持loadXML()方法,无法简易的通过字符串创建XML文档。但在document.implementaion中引入了createDocument()方法

  createDocument()方法需要传递三个参数,命名空间,根标签,文档声明。命名空间,文档声明留空表示创建XMLDOM对象不需要命名空间和文档声明。

 var xmlDom2 = document.implementation.createDocument("","root",null);  //创建xmlDom
var user = xmlDom2.createElement("user2");
xmlDom2.getElementsByTagName("root")[0].appendChild(user);
var user2Text = xmlDom2.createTextNode("cc");
xmlDom2.getElementsByTagName("user2")[0].appendChild(user2Text);
alert(user2Text.innerHTML); //undefind
          alert(user2Text.textContent);//cc

二 2.DOM2中XML载入 

     DOM2只支持load()方法,载入一个同一台服务器的外部XML文件。也有async属性,表示同步或异步,默认异步 。
     DOM2级是没有.xml属性来序列化字符的。

同步加载 

 var xmlDom = document.implementation.createDocument(" ","root",null);
xmlDom.async = false;
xmlDom.load("xml01.xml");
alert(xmlDom.getElementsByTagName("user")[0].tagName);

异步加载

 var xmlDom = document.implementation.createDocument("", "root",null);
xmlDom.async = true;
addEvent(xmlDom,"load",function(){ //事件函数
alert(xmlDom.getElementsByTagName("user")[0].tagName);
});
xmlDom.load("xml01.xml");

ps:load()方法只支持Firefox浏览器,和新版的Opera浏览器,其他的都不支持

DOM2中xml的缺点:

  1.不能简易的使用字符串来创建XML,比如类似与IE的loadXML()方法
  2.不能够像IE中那样,通过.xml序列化XML字符串输出

解决办法:

    DOM2级是没有loadXML()方法直接解析XML字符串,所以提供了DOMParser类型来创建XMLDOM对象。IE9,Safari,Chrome和Opera都支持这个类型。

    模拟loadXML()方法,可以简易的创建xml字符串

 var xmlParser = new DOMParser(); //创建DOMParser对象
var xmlStr = "<root><user1>cici</user1></root>"; //XML字符串
var xmlDom = xmlParser.parseFromString(xmlStr,"text/xml");//创建xml DOM对象
alert(xmlDom.getElementsByTagName("user1")[0].tagName);//获取user元素标签名

    parseFromString( ," ")两个参数:一个是xml字符串,另一个是内容类型text/xml。

    XMLSerializer 类型  实现序列化XML字符串。IE9,Safari,Chrome和Opera都支持这个类型

      模拟.xml属性序列化字符串

 var serializer = new XMLSerializer();
var xml = serializer.serializeToString(xmlDom);//序列化XML
alert(xml); //<root><user1>cici</user1></root>

    解析错误

 var errors = xmlDom.getElementsByTagName("parsererror");
if (errors.length>0) {
throw new Error("XML格式有误:" + errors[0].textContent);
};

跨浏览器兼容XML

  跨浏览器获取XML DOM

 function getXMLDOM(xmlStr){
var xmlDom = null; if (typeof window.DOMParser != "undefind") {
xmlDom = (new DOMParser()).parseFromString(xmlStr,"text/xml");
var errors = xmlDom.getElementsByTagName("parsererror");
if (errors.length > 0) {
throw new Error("XML解析错误:" + errors[0].firstChild.nodeValue);
};
}else if (typeof window.ActiveXObject != "undefind") {
var version = [
'MSXML2.DOMDocument.6.0',
'MSXML2.DOMDocument.3.0',
'MSXML2.DOMDocument'
]
for(var i = 0; i<version.length;i++){
try{
xmlDom = new ActiveXObject(version[i]);
}catch(e){ } }
xmlDom.loadXML(xmlStr);
if(xmlDom.parseError != 0 ){
throw new Error("XML解析错误:" + xmlDom.parseError.reason);
}
return xmlDomDom; }else{
throw new Error("您所使用的系统或浏览器不支持XML DOM!");
}
return xmlDom;
}

    跨浏览器序列化XML

function serializerXML(){
var xml = "";
if (typeof XMLSerializer != "undefind" ) {
var xml = (new XMLSerializer()).serializeToString(xmlDom);
}else if (typeof xmlDom.xml != "undefind") {
xml = xmlDom.xml;
}else{
throw new Error("无法解析XML");
};
return xml;
} var xmlStr = "<root><user2>Lee</user2></root>";
var xmlDom = getXMLDOM(xmlStr);
alert(serializerXML(xmlDom));

JS:XML的更多相关文章

  1. Ajax:异步的JS和XML

    1.Ajax1) AJAX 是 Asynchronous JavaScript And XML 的简称.直译为,异步的JS和XML.2) AJAX的实际意义是,不发生页面跳转.异步载入内容并改写页面内 ...

  2. CSS控制XML与通过js解析xml然后通过html显示xml中的数据

    使用CSS控制XML的显示 book.css bookname{ display:block;color:Red} author{ display:block;font-style:italic} p ...

  3. eclipse导入html、js、xml报错的问题

    今天重新安装eclipse,在导入部分html.js.xml文件,报错,解决办法如下: eclipse->window->preferences->Team,点击validation ...

  4. node.js 解析xml BOM问题(xmlreader sax.js)

    Email:longsu2010 at yeah dot net 之前写了两篇文章关于node.js解析xml,说的是xmlreader,文章如下 node.js解析xml(xmlreader) no ...

  5. js创建xml对象

    js创建xml对象 //创建对象 function getDataXML() {     var objTds = $("TEXTAREA");     var count = o ...

  6. js 读取xml文件

    读取xml文件 [原创 2007-6-20 17:35:37]     字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...

  7. js 对XML文件的保存与读取

    一.保存(在前端用js创建xml格式) function exportToXml(jsonStr){ var obj = eval('('+ jsonStr + ')'); var xmlDoc = ...

  8. JS读取XML文件数据并以table显示数据(兼容IE火狐)

    先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinf ...

  9. js操作XML文件兼容IE与FireFox

    最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的兼容性的问题(悲哀啊.... ...

随机推荐

  1. JSONP 理解 和 实例 讲解

    1.什么是jsonp 1.1 同源策略 浏览器同源策略的限制,XmlHttpRequest只允许请求当前源(相同域名.协议.端口)的资源. -1)jsonp只支持get请求 -2)不受同源策略限制 , ...

  2. 关于application/x-www-form-urlencoded等字符编码的解释说明

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...

  3. MYSQL入门全套(第三部)

    MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引简介 索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构.如果想按特定职员的姓来查找 ...

  4. 浅谈Android中拍照、从相册选择图片并截图相关知识点

    前言 我们在Android开发中经常会需要使用相机或者从相册中选取图片的情况,今天就把这里面相关的知识点总结下,方便以后开发的时候使用. 1.相机拍照并可自定义截图功能 我们先来看如何使用Intent ...

  5. CSS3 之 flexbox 响应式的未来

    CSS3 之 flexbox 响应式的未来 flexbox 伸缩盒模型 . flex: CSS3中一个重要的而且非常有用的属性,用来制作弹性布局是非常的方便而又强大. . flex布局:旨在提供一个更 ...

  6. java基本知识小记(1)

    1.Java中的值传递 值传递意味着对于传给方法的每个参数都会制作一份副本然后将副本而不是原始值传递给方法并且通过参数的名进行引用. 注意:虽然传值机制对于所有参数类型都适用,但是他对对象类型的作用与 ...

  7. html5页面打包成App - Android或Iphone安装程序

    下载安装前端开发工具:HBuilder 官网下载:http://www.dcloud.io/ 根据官网说明安装 * 打开登录HBuilder,把做好的H5页面通过添加app项目把H5的文件夹加入进来( ...

  8. BZOJ3436——小K的农场

    1.题意:大概是给一些制约限制,问是否存在合法解 2.分析:我们来观察这三个限制 农场a比农场b至少多种植了c个单位的作物     可以变成b 比 a至多多种了-c 农场a比农场b至多多种植了c个单位 ...

  9. Segment set

    题目大意: 在一个平面上,给定N根线段,若某条线段与另一条线段相交,则将它们归于同个集合,给定k,问第k条线段所在的集合中线段的数量. 题目分析: 问题主要考察计算几何和并查集. 首先我们要判断两条线 ...

  10. ASM,C数据类型

    汇编: db  单字节 = 8bit dw 单字    = 16bit dd  双字   = 32bit C数据类型: char                字节 8bit unsigned cha ...