JavaScript XML 跨浏览器
来源:互联网 发布:旅游大数据应用 编辑:程序博客网 时间:2024/06/06 11:36
一、浏览器对XML DOM的支持 1.判断浏览器对DOM2.0级别的XML的支持 alert(document.implementation.hasFeature("XML", "2.0")); // true 2.解析XML // 在ie8以下创建XML function createXML() { if(typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.DOMDocument", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument.6.0"], i, len; for (i = 0, len = versions.length; i < len ; i++) { try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (error){} } } return new ActiveXObject(arguments.callee.activeXString); } // 解析XML字符串为XML DOM对象 function parseXml (xml) { var xmlDom; if (typeof DOMParser != "undefined") { xmlDom = (new DOMParser()).parseFromString(xml, "text/xml"); var errors = xmlDom.getElementsByTagName("parsererror"); if(errors.length) { throw new Error(errors[0].textContent); } //alert(xmlDom.documentElement.tagName); } else if (typeof ActiveXObject != "undefined") { xmlDom = new createXML(); xmlDom.loadXML(xml); if (xmlDom.parseError != 0) { throw new Error(xmlDom.parseError.reason); } //alert(xmlDom.xml); } else { throw new Error("不支持xml dom"); } return xmlDom; } // 测试 var xmldom = null; try { xmldom = parseXml("<root><child/></root>"); } catch (ex){ alert(ex.message); } alert(xmldom); 3.序列化xml function serializeXml(xmldom){ if (typeof XMLSerializer != "undefined"){ return (new XMLSerializer()).serializeToString(xmldom); } else if (typeof xmldom.xml != "undefined"){ // Less IE8 return xmldom.xml; } else { throw new Error("Could not serialize XML DOM."); } } // 测试 var xmldom = null; try { xmldom = parseXml("<root><child/></root>"); } catch (ex){ alert(ex.message); } var serizlize = serializeXml(xmldom); alert(serizlize); // <root><child/></root> 4.加载xml文件 function parseXmlFile(file) { try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load(file); } catch(e) {alert(e.message)} return xmlDoc; }二、浏览器对XPATH的支持 1.判断浏览器对DOM3的XPath的支持 alert(document.implementation.hasFeature("XPath", "3.0")); // true 2.跨浏览器兼容 /**根据 * param context : XML DOM上下文环境 * param expression : XPath的查询表达式 * param namespaces : 命名空间 */ function selectNodes(context, expression, namespaces){ var doc = (context.nodeType != 9 ? context.ownerDocument : context); if (typeof doc.evaluate != "undefined"){ var nsresolver = null; if (namespaces instanceof Object){ nsresolver = function(prefix){ return namespaces[prefix]; }; } var result = doc.evaluate(expression, context, nsresolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var nodes = new Array(); if (result !== null){ for (var i=0, len=result.snapshotLength; i < len; i++){ nodes.push(result.snapshotItem(i)); } } return nodes; } else if (typeof context.selectNodes != "undefined"){ // 创建命名空间字符串 if (namespaces instanceof Object){ var ns = ""; for (var prefix in namespaces){ if (namespaces.hasOwnProperty(prefix)){ ns += "xmlns:" + prefix + "='" + namespaces[prefix] + "' "; } } doc.setProperty("SelectionNamespaces", ns); } var result = context.selectNodes(expression); var nodes = new Array(); for (var i=0,len=result.length; i < len; i++){ nodes.push(result[i]); } return nodes; } else { throw new Error("No XPath engine found."); } } var xmldom = null; try { xmldom = parseXml("<yc:root xmlns:yc=\"http://www.yc.com/\"><yc:child>zhangshan</yc:child><yc:child>lisi</yc:child></yc:root>"); } catch (ex){ alert(ex.message); } var result = selectNodes(xmldom.documentElement, "yc:child", { yc: "http://www.yc.com/"}); for(var i = 0, len = result.length; i < len; i++) { alert(result[i].firstChild.nodeValue); // zhangshan,lisi }三、浏览器对XLST的支持 将xml文件用xsl文件修饰,形成为html文件,html文件包括xml的内容和xsl的样式 下面我们来讲一个例子,大体是用javascript操作xml文件和xsl文件,将他们合并为html形式的文件当然, 我们返回的是html形式的字符串,以下是具体步骤: 1.准备文件cdcatalog.xml和cdcatalog.xsl ①cdcatalog.xml文件: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited with XML Spy v2007 (http://www.altova.com) --> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd> </catalog> ②cdcatalog.xsl文件: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited with XML Spy v2007 (http://www.altova.com) --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> 2.用javascript将两个文件加载,用上述的parseXmlFile函数 var xmldom = parseXmlFile("xml/cdcatalog.xml"); var xsltdom = parseXmlFile("xml/cdcatalog.xsl"); 3.将xml文件和xsl文件转换为字符串 function transform(context, xslt){ if (typeof XSLTProcessor != "undefined"){ // 创建XSLTProcessor对象 var processor = new XSLTProcessor(); // 导入xslt样式表 processor.importStylesheet(xslt); // 转化为文档 var result = processor.transformToDocument(context); // 序列化为字符串 return (new XMLSerializer()).serializeToString(result); } else if (typeof context.transformNode != "undefined") { return context.transformNode(xslt); } else { throw new Error("No XSLT processor available."); } } var result = transform(xmldom, xsltdom); alert(result); // html形式的字符串 4.接下来就是将result返回的字符串拷贝下来,放入一个html文件中就可以看到效果了。
0 0
- JavaScript XML 跨浏览器
- javascript跨浏览器创建XML对象
- 关于Javascript解析XML跨浏览器的尝试
- javascript读取XML(兼容所有浏览器)
- 跨浏览器操作xml
- 跨浏览器的javascript
- 开发跨浏览器JavaScript
- 开发跨浏览器javascript
- 开发跨浏览器javascript
- JavaScript跨浏览器兼容性问题
- Javascript 跨浏览器事件
- JavaScript跨浏览器实现
- 跨浏览器 解析 XML DOM
- js跨浏览器操作xml
- 解析 XML - 跨浏览器实现
- JavaScript调用xslt转化xml实现多浏览器支持
- 多浏览器兼容的Javascript读取XML节点方法
- 开发跨浏览器的JavaScript
- C++实现动态多维数组
- 【day0404】C++ main命令行选项
- Espresso 自动化测试(十二) -recyclerView 以及 viewPager的使用
- 迭代算法
- HNACM(七)A.物资调度
- JavaScript XML 跨浏览器
- 关于shared_ptr
- WebGIS入门知识
- 文件存储
- JavaScript常见跨域思路代码
- 《统计学习方法》笔记(4):朴素贝叶斯
- 源码--文件下载
- mysql引擎
- 音频-音频术语名词解释