【JavaScript】封装XML类库
来源:互联网 发布:淘宝网冬季女款棉服 编辑:程序博客网 时间:2024/06/05 00:45
序
不同浏览器对XML文件的处理大不相同,本文用了一个XML类对常见的XML操作进行了封装。
源代码
Github库:https://github.com/duzixi/XMLTool
// 定义浏览器类型if(typeof BrowserType == "undefined"){ var BrowserType = {}; BrowserType.IE = 0; BrowserType.Firefox = 1; BrowserType.Safari = 2;}// XML构造函数XML = function (filePath) {this.filePath = filePath;var xmlDoc;var isOk; try{ // IE浏览器 xmlDoc = new ActiveXObject("microsoft.XMLDOM"); xmlDoc.async = false; isOk = xmlDoc.load(this.filePath); xmlDoc.setProperty('SelectionLanguage','XPath'); this.browsertype = BrowserType.IE; }catch(e){ try{ // Firefox, Mozilla, Opera, 其他浏览器 xmlDoc = document.implementation.createDocument("","",null); xmlDoc.async = false; isOk = xmlDoc.load(this.filePath); this.browsertype = BrowserType.Firefox; }catch(e){ try{ // Chrome,Safari 浏览器 var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET",this.filePath,false); xmlhttp.send(null); // alert(xmlhttp.responseText); // 如果有responseText 但没有responseXML 就是XML格式或编码问题 xmlDoc = xmlhttp.responseXML; isOk = true; this.browsertype = BrowserType.Safari; } catch (e){ isOk = false; } } } if(isOk){ this.xmlDoc = xmlDoc; this.root = xmlDoc.documentElement; } else { alert("文件" + this.filePath + "载入失败"); }}// 返回根节点名XML.prototype.getRootName = function () {return this.root.nodeName;}// 返回单一节点XML.prototype.getSingleNode = function(nodeName) { if (this.browsertype == BrowserType.IE) { return this.root.selectSingleNode(nodeName); } else { var nsResolver = this.xmlDoc.createNSResolver (this.root); return this.xmlDoc.evaluate(nodeName, this.root, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); }}// 返回子节点个数XML.prototype.childCount = function(nodeName) { var node = this.cleanEmptyTextNode(this.getSingleNode(nodeName).childNodes); return node.childNodes.length;}// 判断是否为空的文本节点XML.prototype.isEmpty = function (node){ if (node == null) { return false; } return node.nodeType == 3 && /\s/.test(node.nodeValue);}// 清除子节点中的空文本节点并返回父节点XML.prototype.cleanEmptyTextNode = function (childNodes) { var parentNode = childNodes[0].parentNode; for(var i = 0; i < childNodes.length; i++) { //如果是文本节点,并且值为空,则删除该节点 if(this.isEmpty(childNodes[i])) { parentNode.removeChild(childNodes[i]); } } return parentNode;}// 获取子节点名称XML.prototype.getChildNames = function(nodeName) { var names = new Array(); var node = this.getSingleNode(nodeName); node = this.cleanEmptyTextNode(node.childNodes); var count = node.childNodes.length; for (var i = 0; i < count; i++) { names[i] = node.childNodes[i].tagName; } return names;}// 获取子节点属性XML.prototype.getChildAttributes = function (nodeName, attribute) { var attributes = new Array(); var node = this.getSingleNode(nodeName); node = this.cleanEmptyTextNode(node.childNodes); var count = node.childNodes.length; for (var i = 0; i < count; i++) { attributes[i] = node.childNodes[i].getAttribute(attribute); } return attributes;}// 选择子节点文本中包含特定关键字XML.prototype.selectNodeContains = function (keyword) { // 先对关键字做字符串处理 keyword.replace(/'/g,""); keyword.replace(/"/g,""); var xPath="//*[contains(text(),'" + keyword + "')]"; if (this.browsertype == BrowserType.IE) { return this.root.selectNodes(xPath); } else { var arr = new Array(); var nsResolver = this.xmlDoc.createNSResolver (this.root); var result = this.xmlDoc.evaluate(xPath, this.root, nsResolver, XPathResult.ANY_TYPE, null); var node = result.iterateNext(); //枚举第一个元素 if(!this.isEmpty(node)) { arr[arr.length] = node; } while (node) { node = result.iterateNext(); //枚举下一个元素 if (!node) { break; } if(!this.isEmpty(node)) { arr[arr.length] = node; } } return arr; }}Array.prototype.show = function (separator) { var str = ""; for (var i = 0; i < this.length; i++) { str += this[i] + (i == this.length - 1 ? "" : separator); } return str;}
后续
IE浏览器和火狐浏览器支持本地XML文件读取,谷歌浏览器由于跨域原因不支持封装。
阅读全文
0 0
- 【JavaScript】封装XML类库
- 自己写的一个JavaScript 操作XML 封装类
- 封装Xml
- javascript 封装
- javascript封装
- JavaScript 封装
- JavaScript封装
- javascript 封装
- JavaScript封装
- js xml封装解析
- xmlbeans 封装xml
- xml的封装
- 操作XML封装类
- XML工具封装类
- 封装的XML
- xml方法封装
- 网络:XML 解析封装
- XML封装与解析
- Butter Knife 8.8.1的安装和使用
- echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
- mysql重置密码
- Resnet学习笔记(一)--resnet.py
- jquery取消一次单击事件后 再进行单击事件
- 【JavaScript】封装XML类库
- mysql 优化建议21条
- ORA-01658:无法为表空间users中的段创建initial区
- 怎么设置font awesome图标的大小?
- jQuery高级编程(2)javascript基础
- ParameterizedType例子
- logback使用
- 新国金挖矿宝解读比特币之共识机制
- SeaJS 按需加载js模块