javascript跨浏览器操作xml
//跨浏览器获取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的更多相关文章
- 第一百二十六节,JavaScript,XPath操作xml节点
第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...
- 跨浏览器读取XML
这里跨浏览器,但是只能读取字符串XML文档,可以通过Ajax方式load一个XML文档,将文件XML转变为字符串 // 跨浏览器返回XML DOM对象 function getXMLDOM(xmlSt ...
- JavaScript跨浏览器绑定事件函数的优化
JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...
- javascript跨浏览器事件对象类库
一.前言 学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家. 二.事件对象封装 将对浏览器事件对象的操作封装成eventObject.js方便调用 // ...
- JavaScript跨浏览器处理事件以及相关对象
主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...
- Javascript跨浏览器的事件对象
一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...
- 封装常用的Javascript跨浏览器方法
var EventUntil={ // 跨浏览器的添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListen ...
- javascript 跨浏览器事件处理
<div id="myDiv" style="width:100px; height:100px; border:1px solid #f00;"> ...
- JavaScript 【跨浏览器处理XML,做个兼容】
//兼容方法 function getXMLDOM(xmlStr) { var xmlDom = null; if (typeof windo ...
随机推荐
- css 鼠标经过图片缓慢切换图片、鼠标离开缓慢还原
https://blog.csdn.net/qq_26780317/article/details/80486766 一.控制背景图片在一个圆形div内切换 .header .logo { width ...
- Nginx-配置负载均衡实例
配置负载均衡实例 实现效果: 配置负载均衡 实验代码 1) 首先准 备两个同时启动的 Tomcat 2) 在 nginx.conf 中进行配置 随着互联网信息的爆炸性增长,负载均衡(load bala ...
- Task1.PyTorch的基本概念
1.什么是Pytorch,为什么选择Pytroch? PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Pyth ...
- FPGA设计中遇到的奇葩问题之“芯片也要看出身”
FPGA设计中遇到的奇葩问题之“芯片也要看出身”(一) 昨夜西风凋碧树.独上高楼,望尽天涯路 2000年的时候,做设计基本都是使用Xilinx公司的Virtex和Virtex-E系列芯片.那时候Alt ...
- php range()函数 语法
php range()函数 语法 作用:创建一个包含指定范围的元素的数组.dd马达哪家好 语法:range(low,high,step) 参数: 参数 描述 low 必需.规定数组的最低值. hig ...
- luoguP4721 【模板】分治 FFT (分治NTT)
给定 $g[1....n-1]$,求 $f[0],f[1],...,f[n-1]$,其中 $f[i]=\sum_{j=1}^{i}f[i-j]g[j]$ 变界为 $f[0]=1$ 答案模 9 ...
- Android逆向之旅---静态分析技术来破解Apk
一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...
- [CSP-S模拟测试]:传递(暴力+bitset)
题目描述 我们称一个有向图$G$是传递的,当且仅当对于图$G$的三个不同顶点$a,b,c$,若图$G$中有一条边从$a$到$b$且有一条边从$b$到$c$,那么图中也有一条边从$a$到$c$.我们称一 ...
- 为 PhpStorm 配置 Xdebug 来调试代码
当项目越来越复杂,排错就越发困难. 你以为代码是这么运行的,但就是有未想到的功能导致流程变得不可捉摸. 此时我们需要调试啊调试... PhpStorm 是一款优秀的 PHP IDE,排除其 Java ...
- PHP不使用内置函数intval(),实现字符串转整数
平时我们用PHP时,将字符串转化为整型时,一般都是使用 intval() 内置函数,那么如果我们自己写,怎么写一个呢? 此时我们可以利用 ASCII 码计算得整数的特性,因为每个字符都对应一个 ASC ...