跨浏览器读取XML
2013-12-19 18:59
204 查看
这里跨浏览器,但是只能读取字符串XML文档,可以通过Ajax方式load一个XML文档,将文件XML转变为字符串
序列化XML,序列号的意思,这里就不做解释了哈。
现在XMLDOM获取到了,我们接下来获取节点,其中xpath为节点名称。
获取节点集合
测试代码
// 跨浏览器返回XML DOM对象 function getXMLDOM(xmlStr) { var xmlDom = null; if (typeof window.DOMParser != 'undefined') { xmlDom = (new DOMParser).parseFromString(xmlStr, 'text/xml'); var errors = xmlDom.getElementsByTagName('parsererror'); if (errors.length > 0) { throw new Error('错误信息:' + errors[0].textContent); } } else if (typeof window.ActiveXObject != 'undefined') { var version = ['MSXML2.DOMDocument6.0', 'MSXML2.DOMDocument3.0', 'MSXML2.DOMDocument']; for (var i = 0; i < version.length; i++) { try { var xmlDom = new ActiveXObject(version[i]); } catch (e) { // 跳过 } } xmlDom.loadXML(xmlStr); if (xmlDom.parseError != 0) { throw new Error('错误信息:' + xmlDom.parseError.reason); } return xmlDom; } else { throw new Error('您的系统或浏览器不支持XML DOM对象!'); } return xmlDom; }
序列化XML,序列号的意思,这里就不做解释了哈。
function serializerXML(xmlDom) { var xml = ''; if (typeof window.XMLSerializer != 'undefined') { xml = (new XMLSerializer()).serializeToString(xmlDom); } else if (typeof xmlDom.xml != 'undefined') { xml = xmlDom.xml; } return xml; }
现在XMLDOM获取到了,我们接下来获取节点,其中xpath为节点名称。
//跨浏览器单一节点 function selectSingleNode(xmlDom, xpath) { var node = null; if (typeof xmlDom.evaluate != 'undefined') { //W3C var patten = /\[(\d+)\]/; var flag = xpath.match(patten); var num = 0; if (flag !== null) { num = parseInt(RegExp.$1) + 1; xpath = xpath.replace(patten, '[' + num + ']'); } var result = xmlDom.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; }
获取节点集合
//跨浏览器节点集合 function selectNodes(xmlDom, xpath) { var nodes = []; if (typeof xmlDom.evaluate != 'undefined') { //W3C var patten = /\[(\d+)\]/; var flag = xpath.match(patten); var num = 0; if (flag !== null) { num = parseInt(RegExp.$1) + 1; xpath = xpath.replace(patten, '[' + num + ']'); } var result = xmlDom.evaluate(xpath, xmlDom, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); if (result != null) { var node = null; while ((node = result.iterateNext()) !== null) { nodes.push(node); } } } else if (typeof xmlDom.selectNodes != 'undefined') { //IE nodes = xmlDom.selectNodes(xpath); } return nodes; }
测试代码
var xmlStr = '<root><user id="5">Lee</user><user id="6">Koko</user></root>'; var xmlDom = getXMLDOM(xmlStr); var nodes = selectNodes(xmlDom, 'root/user'); alert(nodes.length); alert(serializerXML(nodes[0])); alert(serializerXML(nodes[1]));
相关文章推荐
- js读取本地xml文件 兼容IE Firfox Chrome 等浏览器
- PHP生成xml 无法识别或是无法读取或是浏览器不识别等问题
- 不同浏览器读取XML问题
- 如何跨浏览器读取xml文档
- 多浏览器兼容的Javascript读取XML节点方法
- javascript读取xml的解法,兼容多浏览器
- avascript读取XML(兼容所有浏览器)
- javascript读取XML(兼容所有浏览器)
- JAVA操作XML(3)--读取XML文档的内容,并将内容显示在浏览器上
- PHP读取excel并导出xml文件
- 使用JDOM读取XML信息
- XML 读取器和编写器----读取XML 时应用验证
- XML架构----读取和写入架构
- [libxml2]_[C/C++]_[使用libxml2读取内存的xml片段]
- unity Android 打包后读取 xml 文件
- Unity3D 09-XML文件创建,读取,修改,添加
- java读取xml文件到数据库
- SQLServer 中dm_os_ring_buffers(ring_buffer_connectivity)读取XML
- IDEA 中读取不了配置文件以及ClassPathXmlApplicationContext与FileSystemXmlApplicationContext
- ajax中用responseXML读取不到中文数据的问题