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