//跨浏览器获取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. java判断回文数

  2. Intellij IDEA 插件开发秘籍

    来这里找志同道合的小伙伴! 这里总结一下 Intellij IDEA 插件开发的知识,供大家参考,本篇文章包含以下内容: 开发环境搭建 Component 介绍 Extension Point And ...

  3. python开发之virtualenv与virtualenvwrapper

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  4. ORM多表查询下

    一.多表查询 1.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接 ...

  5. Test 3.27 T2 旅行

    Description FGD 想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说 FGD 不希望在刚吃过一顿 ...

  6. 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)

    // // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...

  7. 【Go】Go语言的%d,%p,%v等占位符的使用

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...

  8. qt qsplashscreen 启动画面 延时

    intdelayTime=3; QElapsedTimer timer; timer.start(); while(timer.elapsed()<(delayTime*1000)) { app ...

  9. 给数据库用户授权(对象多为系统表,如dba可以查看的表)

    我们知道,创建一个新用户时,网上各种的帖子包括书籍中经常用到一个grant connect,resource to user;,这样才能用这个用户登录数据库,那么这条语句的真正作用是什么呢? 首先,g ...

  10. EXP-00091和IMP-00010报错

    原来导出表的库:database ORACLE_SID=TEST0221 版本: 11.2.0.4需要导进的库:database ORACLE_SID=PROD 版本:10.2.0.1因为字符集的问题 ...