首页 > 代码库 > 原生javascript解析xml文档
原生javascript解析xml文档
之前写过一篇 《javascript/jQuery解析或转换json和xml》链接是http://my.oschina.net/ososchina/blog/343748,这篇博客详细解释了json使用 JSON.js window.eval() ,jQuery
与字符串互相转换的方法 ,顺便也说了一点jQuery解析xml文档的方法,这里着重论述javascript操作xml。
顺便提一下,今天做项目有一点问题,如何让服务程序接口返回的就是json,而不需要 使用 jQuery.ajax设置 dataType就能得到json呢?
众所周知,服务端的 数据以json字符串输出,文档类型是 “text/html”,因此返回前台的默认是字符串,如果返回前台的指定为json,
需要设置http响应头application/json,这样返回的直接就是json对象了。
注意,必须在输出流之前设置响应头
//java中 response.setContentType("application/json;charset=UTF-8"); // request.setCharacterEncoding("UTF-8"); //php header(‘application/json;charset=utf-8‘);
好了,现在说今天的主角<
原生javascript解析xml文档
>
var loadXML = function(xmlString){ //构建xmldoc对象 var xmlDoc=null; if(window.DOMParser) { try{ domParser = new DOMParser(); xmlDoc = domParser.parseFromString(xmlString, ‘text/xml‘); }catch(e){ } } else if(!window.DOMParser && window.ActiveXObject) { //window.DOMParser 判断是否是非ie浏览器 var xmlDomVersions = [‘MSXML2.DOMDocument‘,‘Microsoft.XMLDOM‘]; for(var i=0;i<xmlDomVersions.length;i++){ try{ xmlDoc = new ActiveXObject(xmlDomVersions[i]); xmlDoc.async = false; xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串 break; }catch(e){ continue; } } } else{ return null; } return xmlDoc; }
给个数据源
var datasource = ‘<?xml version="1.0" encoding="utf-8" ?> <bookstore> <book id="No1"> <title>An Introduction to XML</title> <author>Chunbin</author> <year>2010</year> <price>98.0</price> </book> <book id="No2"> <title>The Performance of DataBase</title> <author>John</author> <year>1996</year> <price discount=‘7‘ data=http://www.mamicode.com/‘8‘>56.0 >然后来使用,用法很简单
var xmlDoc = loadXML(datasource); if(xmlDoc) //xml的解析和html doc几乎完全相同,可以使用 xmlDoc.getElementById(),xmlDoc.getElementsByTagName(),xmlDoc.getElementsByClassName { var books= xmlDoc.getElementsByTagName(‘book‘); var book = xmlDoc.getElementById(‘No2‘); if(books) { for(var i=0;i<books.length;i++) { var title = books[i].getEelementsByTagName(‘title‘)[0].firstChild.nodeValue; //确实有点长,因为 var author = books[i].getEelementsByTagName(‘author‘)[0].innerHTML;//变短点 var year = books[i].getEelementsByTagName(‘year‘)[0].innerHTML; //或者这样 var price = Number(books[i].getEelementsByTagName(‘price‘)[0].innerHTML); //有值了,下一步不是我的事了 } //获取属性使用 attributes,得到的是nodevaluemap var attrs = book.attributes; for(var i=0;i<attrs.length;i++) { var attr = attrs[i]; var attr_name = attr.name; var attr_value = attr.value; } } }-----------------------------------------------------------------
常用方法,属性api
attributes: id length childElementCount childNodes children className firstChild firstElementChild innerHTML(只读) lastChild lastElementChild localName nextSibling nodeName nodeType nodeValue ownerDocument parentNode prefix(新)-->表示前缀,xml允许前缀 namespaceURI(新)-->表示命名空间 previousSibling tagName注意:xml是字符串数据,一般来说是只读的属性,即使使用某些手段修改,但也不能做到持久化。因为除了文件上传外js不允许进行io操作
javascript解析xml就此结束
try doing it!
原生javascript解析xml文档
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。