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

原文地址:https://www.cnblogs.com/codeskilla/p/5002967.html