zoukankan      html  css  js  c++  java
  • xpath NOT IE

    1、

    http://www.w3school.com.cn/xmldom/dom_domparser.asp

    chrome 中 “for (var z in domparse)”操作后,发现 DOMParser 只有一个方法 parseFromString

    2、

    https://developer.mozilla.org/zh-CN/docs/Web/API/DOMParser

     1 var parser = new DOMParser();
     2 var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
     3 // 返回一个Document对象,但不是SVGDocument也不是HTMLDocument对象
     4 
     5 parser = new DOMParser();
     6 doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
     7 // 返回一个SVGDocument对象,同时也是一个Document对象.
     8 
     9 parser = new DOMParser();
    10 doc = parser.parseFromString(stringContainingHTMLSource, "text/html")
    11 // 返回一个HTMLDocument对象,同时也是一个Document对象.

    3、

    通过 xml字符串 得到 document对象:

     1 function LoadStrXml(_strXml)
     2 {
     3     var xmlDoc=null;
     4     //判断浏览器的类型
     5     //支持IE浏览器 
     6     if(!window.DOMParser && window.ActiveXObject){   //window.DOMParser 判断是否是非ie浏览器
     7         var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
     8         for(var i=0;i<xmlDomVersions.length;i++){
     9             try{
    10                 xmlDoc = new ActiveXObject(xmlDomVersions[i]);
    11                 xmlDoc.async = false;
    12                 xmlDoc.loadXML(_strXml); //loadXML方法载入xml字符串 //load方法载入xml文件
    13                 break;
    14             }catch(e){
    15                 console.error("LoadStrXml err : "+e.message);
    16             }
    17         }
    18     }
    19     //支持Mozilla浏览器
    20     else if(window.DOMParser && document.implementation && document.implementation.createDocument){
    21         try{
    22             /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
    23              * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
    24              * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
    25              * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
    26              */
    27             domParser = new  DOMParser();
    28             xmlDoc = domParser.parseFromString(_strXml, 'text/xml');
    29         }catch(e){
    30             console.error("LoadStrXml err : "+e.message);
    31         }
    32     }
    33     else{
    34         return null;
    35     }
    36 
    37     return xmlDoc;
    38 }

    4、

    测试代码(chrome):

     1     function NsResolver_Multi(prefix)
     2     {
     3         var ns =
     4         {
     5             "cge" : "http://iec.ch/TC57/2005/SVG-schema#",
     6             "xlink" : "http://www.w3.org/1999/xlink",
     7             "hzsvg" : "http://holleygrid.cn/svg"
     8         };
     9         console.log("ns[prefix] : "+ns[prefix]);
    10         var str = null;
    11         if (ns[prefix])
    12         {
    13             str = ns[prefix];
    14         }
    15         else
    16             str = "http://www.w3.org/2000/svg";
    17         console.log("NsResolver_Multi return  : "+str);
    18         return str;
    19     }
    20 
    21     function NsResolver_Root()
    22     {
    23         return "http://www.w3.org/2000/svg";
    24     }
    25 
    26     window.onload = function()
    27     {
    28         console.log("window.onload");
    29 //*
    30         console.log("");
    31 
    32         domParser = new  DOMParser();
    33         var strXml = ''
    34             +'<L xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">'
    35             +'    <z>zzz</z>'
    36             +'    <xlink:c>ccccc</xlink:c>'
    37             +'</L>';
    38         var xmlDoc = domParser.parseFromString(strXml, 'application/xml');
    39 
    40         var xpathResult = xmlDoc.evaluate("//zzz:z", xmlDoc, NsResolver_Multi, 0, null); // ZC: 这里的“myns”是随便写的,只要不是"NsResolver_Multi"中的"cge"/"xlink"/"hzsvg" 就行(对于这里的讲解别死脑经,注意变换)。
    41         //var xpathResult = xmlDoc.evaluate("//zzz:z", xmlDoc, NsResolver_Root, 0, null);
    42         if ((xpathResult.resultType == 4) || (xpathResult.resultType == 5))
    43         {
    44             var node = xpathResult.iterateNext();
    45             console.log("node : "+node);
    46             //alert("node : "+node);
    47         }
    48 
    49         xpathResult = xmlDoc.evaluate("//xlink:c", xmlDoc, NsResolver_Multi, 0, null);
    50         if ((xpathResult.resultType == 4) || (xpathResult.resultType == 5))
    51         {
    52             var node = xpathResult.iterateNext();
    53             console.log("node : "+node);
    54             //alert("node : "+node);
    55         }
    56         //*/
    57     };

    4.1、

    打印输出:

    1 window.onload
    2 
    3 ns[prefix] : undefined
    4 NsResolver_Multi return  : http://www.w3.org/2000/svg
    5 node : [object SVGElement]
    6 ns[prefix] : http://www.w3.org/1999/xlink
    7 NsResolver_Multi return  : http://www.w3.org/1999/xlink
    8 node : [object Element]

    另一个例子:

     1       function NameSpace_z(_strPrefix)
     2     {
     3         var str = null;
     4         if (_strPrefix == "cge")
     5             str = "http://iec.ch/TC57/2005/SVG-schema#";
     6         else if (_strPrefix == "xlink")
     7             str = "http://www.w3.org/1999/xlink";
     8         else if (_strPrefix == "hzsvg")
     9             str = "http://holleygrid.cn/svg";
    10         else
    11             str = "http://www.w3.org/2000/svg";
    12         //console.log("NameSpace_z return  : "+str);
    13         return str;
    14     }
    15     
    16     window.onload = function()
    17     {
    18         var svg = document.getElementsByTagName("svg")[0];
    19         var xpathResult = document.evaluate("//zzz:g[@id='BusbarSectionClass']", svg, NameSpace_z, 0, null); // 从 节点svg 开始查询
    20         if ((xpathResult.resultType == 4) || (xpathResult.resultType == 5))
    21         {
    22             var node = xpathResult.iterateNext();
    23             console.log("node : "+node);
    24             return node;
    25         }
    26     }

    ZC:

    关于 自定义 命名空间 Resolver,参考:“https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver

    Z

  • 相关阅读:
    洛谷 P3391文艺平衡树 【fhq_treap】
    食物链(转自yekehe2002大神)
    TX
    黑匣子——KEY
    Splay初学习
    BZOJ2330_糖果_KEY
    BZOJ3224_普通平衡树_KEY
    BZOJ2730_矿场搭建_KEY
    BZOJ1452_Count_KEY
    初识主席树_Prefix XOR
  • 原文地址:https://www.cnblogs.com/codeskilla/p/5002967.html
Copyright © 2011-2022 走看看