zoukankan      html  css  js  c++  java
  • JavaScript 【跨浏览器XPath,做个兼容】

    IE的Xpath 获取单一节点

     var xmlDom = getXMLDOM(xmlStr);//调用之前写好的方法获得XMLDOM对象
            //        var node = xmlDom.selectSingleNode("root/user"); //获取单一节点
            //        alert(node.firstChild.nodeValue);
    //        var node = xmlDom.selectSingleNode("root/user/text()"); //text()可以获取节点内的值
            //        alert(node.nodeValue);
    
            var node = xmlDom.selectSingleNode("//user[1]"); //双斜杠可以获取不关心层次的第一个user
            alert(node.xml);
            var node = xmlDom.selectSingleNode("root/user[@idp=5]");
            //通过唯一属性找到user节点
    
            alert(node.xml);
    
    //        var nodes = xmlDom.selectNodes("root/user");
    //        alert(nodes[1].xml)
    View Code


    下面是非IE 和IE 的Xpath 获取单个节点,兼容方法

        //做兼容,单个节点
        function selectSingleNode(xmlDom, xpath) {
            var node = null;
            //W3C
            if (typeof xmlDom.evaluate != "undefined") {
                /*此处需要将W3C标准,火狐等浏览器下的xpath【数字】加1,从而达到与IE xpath统一*/
                var patten = /[(d+)]/g;
                var flag = xpath.match(patten);
                var num = 0;
                if (flag !== null) {
                    num = parseInt(RegExp.$1) + 1;
                    xpath = xpath.replace(patten, '[' + num + ']');
                }
    
                var eva = new XPathEvaluator();
                var result = eva.evaluate(xpath, xmlDom, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); //单一节点
                if (result !== null) {
                    node = result.singleNodeValue;
                }
            }
            else if (typeof xmlDom.selectSingleNode != "undefined") {//IE
    
                node = xmlDom.selectSingleNode(xpath);
            }
            return node;
    
        }
    View Code


    下面是获取集合节点的兼容方法,更单个节点类似。使用iterateNext()方法,将eva.evaluate返回的集合放入数组,以便调用

       //跨浏览器,做个节点集合
        function selectSingleNodes(xmlDom, xpath) {
            var nodes = null;
            //W3C
            if (typeof xmlDom.evaluate != "undefined") {
                /*此处需要将W3C标准,火狐等浏览器下的xpath【数字】加1,从而达到与IE xpath统一*/
                var patten = /[(d+)]/g;
                var flag = xpath.match(patten);
                var num = 0;
                if (flag !== null) {
                    num = parseInt(RegExp.$1) + 1;
                    xpath = xpath.replace(patten, '[' + num + ']');
                }
                var eva = new XPathEvaluator();
                var result = eva.evaluate(xpath, xmlDom, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); //节点集合
                var node = null;
                //下一跳节点
    
                var nodes = [];
                while ((node = result.iterateNext()) !== null) {
                    nodes.push(node);
    
                }
            }
            else if (typeof xmlDom.selectNodes != "undefined") {//IE
    
                nodes = xmlDom.selectNodes(xpath);
            }
            return nodes;
    
        }
        //    alert(serializerXML(selectSingleNodes(xmlDom, "root/user")));
        alert(serializerXML(selectSingleNodes(xmlDom, "root/user")[1]));
    
    </script>
    View Code
  • 相关阅读:
    视频基础知识 720P、1080i、1080P
    PS/ES/TS区别
    服务端时间与COOKIE问题
    H.264名词
    一组视频音频编辑软件的介绍
    浅述WinForm多线程编程与Control.Invoke的应用
    [原创]补丁工具V1.6.3
    .net序列化与反序列化错误,可能是Local Settings\Temp不存在引起
    通过IViewObject接口,取浏览器的图象,实现SNAP
    C#实现一个用于开机启动其他程序的Windows服务
  • 原文地址:https://www.cnblogs.com/cpugege/p/3443813.html
Copyright © 2011-2022 走看看