zoukankan      html  css  js  c++  java
  • javascript跨浏览器操作xml

    //跨浏览器获取xmlDom

     1 function getXMLDOM(xmlStr) {
     2     var xmlDom = null;
     3     if (typeof window.DOMParser != 'undefined') {
     4         xmlDom = (new DOMParser).parseFromString(xmlStr,'text/xml'); //创建xmlDom对象
     5         var errors = xmlDom.getElementsByTagName('parsererror');
     6         if(errors.length > 0) {
     7             throw new Error('XML格式有误:'+errors[0].textContent);
     8         }
     9         return xmlDom;
    10     } else if (typeof window.ActiveXObject != 'undefined') {
    11         var version = [
    12             'MSXML2.DOMDocument.6.0',
    13             'MSXML2.DOMDocument.3.0',
    14             'MSXML2.DOMDocument'
    15         ];
    16         for(var i=0;i<version.length;i++) {
    17             try {
    18                 var xmlDom = new ActiveXObject(version[i]);
    19             } catch (e) {
    20                 //遇到错误跳过,继续执行try
    21             }
    22         }
    23         xmlDom.loadXML(xmlStr);
    24         if(xmlDom.parseError != 0) { //使用 !+ 号
    25             throw new Error('错误信息为:' + xmlDom.parseError.reason);
    26         }
    27         return xmlDom;
    28     } else {
    29         throw new Error('系统或浏览器不支持xmlDom对象!');
    30     }
    31     return xmlDom;
    32 }

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

     1 function serializerXML(xmlDom) {
     2     var xml = null;
     3     if(typeof window.XMLSerializer != 'undefined') {//w3c的序列化
     4             var serializer = new XMLSerializer();
     5             xml = serializer.serializeToString(xmlDom);
     6     } else if(typeof xmlDom.xml != 'undefined') { //ie直接序列化
     7             xml = xmlDom.xml;
     8     }
     9     return xml;
    10 }

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

     1 function selectSingleNode(xmlDom,xpath) {
     2     var node = null;
     3     if(typeof xmlDom.evaluate != 'undefined') { //w3c
     4         var patt = /[(d+)]/;
     5         var num = null;
     6         var flag = xpath.match(patt);
     7         if (flag) {
     8             num = parseInt(RegExp.$1) + 1;//w3c下标从1开始,如0加1
     9             xpath = xpath.replace(patt,'['+num+']'); //root/user[1]
    10         }
    11         var result = xmlDom.evaluate(xpath,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
    12         if(result != null) {
    13             node = result.singleNodeValue; //w3c默认的下标是1
    14         }
    15     } else if (typeof xmlDom.selectSingleNode != 'undefined') {//ie中unknown而非 undefined
    16         node = xmlDom.selectSingleNode(xpath);
    17     }
    18     return node;
    19 }

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

     1 function selectNodes(xmlDom,xpath) {
     2     var nodes = [];
     3     if(typeof xmlDom.evaluate != 'undefined') { //w3c
     4         var patt = /[(d+)]/;
     5         var num = null;
     6         var flag = xpath.match(patt);
     7         if(flag) {
     8             num = parseInt(RegExp.$1) + 1;
     9             xpath = xpath.replace(patt,'['+num+']');
    10         }
    11         var result = xmlDom.evaluate(xpath,xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
    12         var node = null;
    13         if(result != null) {
    14             while ((node = result.iterateNext()) !== null) {
    15                 nodes.push(node);
    16             }
    17         }
    18     } else if (typeof xmlDom.selectNodes != 'undefined') { //unkonwn
    19         nodes = xmlDom.selectNodes(xpath);
    20     }
    21     return nodes;
    22 }
    1 var xmlStr = '<root><name id="d1">du1</name><name id="d2">du2</name></root>';
    2 var xmlDom = getXMLDOM(xmlStr);
    3 var nodes = selectNodes(xmlDom,'root/name');
    4 //alert(nodes.length);
    5 //alert(serializerXML(xmlDom)); //序列化xmlStr
    6 //alert(serializerXML(selectSingleNode(xmlDom,'root/name[0]'))); //序列化单一节点
    7 
    8 alert(serializerXML(nodes[0]));//<name id="d1">du1</name>
    9 alert(serializerXML(nodes[1]));
  • 相关阅读:
    HttpClient学习整理
    编写更少量的代码:使用apache commons工具类库
    Java多线程:Callable,Future,FutureTask
    多线程下HashMap的死循环问题
    选择排序算法---直接选择排序和堆排序
    Java多线程:ThreadLocal
    插入排序算法---插入排序与希尔排序
    数据库MySQL与Oracle的一些去O注意项
    交换排序算法---冒泡排序与快速排序
    ImageMagick常用指令详解
  • 原文地址:https://www.cnblogs.com/xccjmpc/p/3455676.html
Copyright © 2011-2022 走看看