//跨浏览器获取xmlDom

 function getXMLDOM(xmlStr) {
var xmlDom = null;
if (typeof window.DOMParser != 'undefined') {
xmlDom = (new DOMParser).parseFromString(xmlStr,'text/xml'); //创建xmlDom对象
var errors = xmlDom.getElementsByTagName('parsererror');
if(errors.length > 0) {
throw new Error('XML格式有误:'+errors[0].textContent);
}
return xmlDom;
} else if (typeof window.ActiveXObject != 'undefined') {
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]);
} catch (e) {
//遇到错误跳过,继续执行try
}
}
xmlDom.loadXML(xmlStr);
if(xmlDom.parseError != 0) { //使用 !+ 号
throw new Error('错误信息为:' + xmlDom.parseError.reason);
}
return xmlDom;
} else {
throw new Error('系统或浏览器不支持xmlDom对象!');
}
return xmlDom;
}

/*
DOM2没有序列化XML的属性,XMLSerializer类型来帮助序列化XML字符串。
IE9、Safari、Chrome和Opera都支持这个类型。
*/

 function serializerXML(xmlDom) {
var xml = null;
if(typeof window.XMLSerializer != 'undefined') {//w3c的序列化
var serializer = new XMLSerializer();
xml = serializer.serializeToString(xmlDom);
} else if(typeof xmlDom.xml != 'undefined') { //ie直接序列化
xml = xmlDom.xml;
}
return xml;
}

//跨浏览器获取xml单一节点

 function selectSingleNode(xmlDom,xpath) {
var node = null;
if(typeof xmlDom.evaluate != 'undefined') { //w3c
var patt = /\[(\d+)\]/;
var num = null;
var flag = xpath.match(patt);
if (flag) {
num = parseInt(RegExp.$1) + 1;//w3c下标从1开始,如0加1
xpath = xpath.replace(patt,'['+num+']'); //root/user[1]
}
var result = xmlDom.evaluate(xpath,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
if(result != null) {
node = result.singleNodeValue; //w3c默认的下标是1
}
} else if (typeof xmlDom.selectSingleNode != 'undefined') {//ie中unknown而非 undefined
node = xmlDom.selectSingleNode(xpath);
}
return node;
}

//跨浏览器获取xml所有节点

 function selectNodes(xmlDom,xpath) {
var nodes = [];
if(typeof xmlDom.evaluate != 'undefined') { //w3c
var patt = /\[(\d+)\]/;
var num = null;
var flag = xpath.match(patt);
if(flag) {
num = parseInt(RegExp.$1) + 1;
xpath = xpath.replace(patt,'['+num+']');
}
var result = xmlDom.evaluate(xpath,xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
var node = null;
if(result != null) {
while ((node = result.iterateNext()) !== null) {
nodes.push(node);
}
}
} else if (typeof xmlDom.selectNodes != 'undefined') { //unkonwn
nodes = xmlDom.selectNodes(xpath);
}
return nodes;
}
 var xmlStr = '<root><name id="d1">du1</name><name id="d2">du2</name></root>';
var xmlDom = getXMLDOM(xmlStr);
var nodes = selectNodes(xmlDom,'root/name');
//alert(nodes.length);
//alert(serializerXML(xmlDom)); //序列化xmlStr
//alert(serializerXML(selectSingleNode(xmlDom,'root/name[0]'))); //序列化单一节点 alert(serializerXML(nodes[0]));//<name id="d1">du1</name>
alert(serializerXML(nodes[1]));

javascript跨浏览器操作xml的更多相关文章

  1. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

  2. 跨浏览器读取XML

    这里跨浏览器,但是只能读取字符串XML文档,可以通过Ajax方式load一个XML文档,将文件XML转变为字符串 // 跨浏览器返回XML DOM对象 function getXMLDOM(xmlSt ...

  3. JavaScript跨浏览器绑定事件函数的优化

    JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...

  4. javascript跨浏览器事件对象类库

    一.前言 学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家. 二.事件对象封装 将对浏览器事件对象的操作封装成eventObject.js方便调用 // ...

  5. JavaScript跨浏览器处理事件以及相关对象

    主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...

  6. Javascript跨浏览器的事件对象

    一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...

  7. 封装常用的Javascript跨浏览器方法

    var EventUntil={ // 跨浏览器的添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListen ...

  8. javascript 跨浏览器事件处理

    <div id="myDiv" style="width:100px; height:100px; border:1px solid #f00;"> ...

  9. JavaScript 【跨浏览器处理XML,做个兼容】

    //兼容方法        function getXMLDOM(xmlStr) {            var xmlDom = null;            if (typeof windo ...

随机推荐

  1. 前端每日实战:86# 视频演示如何用纯 CSS 创作一个方块旋转动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gjgyWm 可交互视频 此视频是可 ...

  2. python实现Restful服务 (基于flask)(1)

    参考:https://www.jianshu.com/p/6ac1cab17929 参考:https://www.cnblogs.com/alexyuyu/p/6243362.html 参考:http ...

  3. CSS3小笔记

    border-radius:圆角属性:border-radius:左上,右上,右下,左下.transform:rotate(角度):transparent 透明的三角形的写法设置宽和高为0,设置边框的 ...

  4. Python3解leetcode Path Sum III

    问题描述: You are given a binary tree in which each node contains an integer value. Find the number of p ...

  5. Python全栈开发,Day3

    一.基本数据类型 基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的.比如加减乘除,幂,取余 + - * / **  % ... 2.bool 布尔值 判断真假以及作为条件变量 ...

  6. 【Java】java.sql.SQLDataException: Cannot determine value type from string

    报错如下: There was an unexpected error (type=Internal Server Error, status=500). Error attempting to ge ...

  7. 【Swagger2】SpringBoot整合swagger2

    Swagger 简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法, ...

  8. MySQL server has gone away 问题解决方法

    问题描述: SQLyog在执行大的sql文件时候,报错,报错日志显示2006 - MySQL server has gone away 解决办法: 在php.ini配置文件的[mysqld]节点下添加 ...

  9. 【2019 Multi-University Training Contest 10】

    01: 02: 03:https://www.cnblogs.com/myx12345/p/11671692.html 04: 05:https://www.cnblogs.com/myx12345/ ...

  10. vue获取v-on绑定事件的触发对象

    <span @click="fn" id="foo">xxx</span> fn(e){ console.log(e);//展开查看e. ...