javascript xml字符串转为JSON对象
来源:互联网 发布:js 判断时间有效性 编辑:程序博客网 时间:2024/06/10 12:41
/* ### jQuery XML to JSON Plugin v1.2 - 2013-02-18 ### * http://www.fyneworks.com/ - diego@fyneworks.com* Licensed under http://en.wikipedia.org/wiki/MIT_License ### Website: http://www.fyneworks.com/jquery/xml-to-json/*//* # INSPIRED BY: http://www.terracoder.com/ AND: http://www.thomasfrank.se/xml_to_json.htmlAND: http://www.kawa.net/works/js/xml/objtree-e.html*//* This simple script converts XML (document of code) into a JSON object. It is the combination of 2 'xml to json' great parsers (see below) which allows for both 'simple' and 'extended' parsing modes.*/// Avoid collisions;if(window.jQuery) (function($){ // Add function to jQuery namespace $.extend({ // converts xml documents and xml text to json object xml2json: function(xml, extended) { if(!xml) return {}; // quick fail //### PARSER LIBRARY // Core function function parseXML(node, simple){ if(!node) return null; var txt = '', obj = null, att = null; var nt = node.nodeType, nn = jsVar(node.localName || node.nodeName); var nv = node.text || node.nodeValue || ''; /*DBG*/ //if(window.console) console.log(['x2j',nn,nt,nv.length+' bytes']); if(node.childNodes){ if(node.childNodes.length>0){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'CHILDREN',node.childNodes]); $.each(node.childNodes, function(n,cn){ var cnt = cn.nodeType, cnn = jsVar(cn.localName || cn.nodeName); var cnv = cn.text || cn.nodeValue || ''; /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>a',cnn,cnt,cnv]); if(cnt == 8){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>b',cnn,'COMMENT (ignore)']); return; // ignore comment node } else if(cnt == 3 || cnt == 4 || !cnn){ // ignore white-space in between tags if(cnv.match(/^\s+$/)){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>c',cnn,'WHITE-SPACE (ignore)']); return; }; /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>d',cnn,'TEXT']); txt += cnv.replace(/^\s+/,'').replace(/\s+$/,'');// make sure we ditch trailing spaces from markup } else{ /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>e',cnn,'OBJECT']); obj = obj || {}; if(obj[cnn]){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>f',cnn,'ARRAY']); // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-childif(!obj[cnn].length) obj[cnn] = myArr(obj[cnn]);obj[cnn] = myArr(obj[cnn]); obj[cnn][ obj[cnn].length ] = parseXML(cn, true/* simple */); obj[cnn].length = obj[cnn].length; } else{ /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>g',cnn,'dig deeper...']); obj[cnn] = parseXML(cn); }; }; }); };//node.childNodes.length>0 };//node.childNodes if(node.attributes){ if(node.attributes.length>0){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'ATTRIBUTES',node.attributes]) att = {}; obj = obj || {}; $.each(node.attributes, function(a,at){ var atn = jsVar(at.name), atv = at.value; att[atn] = atv; if(obj[atn]){ /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'ARRAY']); // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child//if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ]; obj[cnn] = myArr(obj[cnn]);obj[atn][ obj[atn].length ] = atv; obj[atn].length = obj[atn].length; } else{ /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'TEXT']); obj[atn] = atv; }; }); //obj['attributes'] = att; };//node.attributes.length>0 };//node.attributes if(obj){ obj = $.extend( (txt!='' ? new String(txt) : {}),/* {text:txt},*/ obj || {}/*, att || {}*/); txt = (obj.text) ? (typeof(obj.text)=='object' ? obj.text : [obj.text || '']).concat([txt]) : txt; if(txt) obj.text = txt; txt = ''; }; var out = obj || txt; //console.log([extended, simple, out]); if(extended){ if(txt) out = {};//new String(out); txt = out.text || txt || ''; if(txt) out.text = txt; if(!simple) out = myArr(out); }; return out; };// parseXML // Core Function End // Utility functions var jsVar = function(s){ return String(s || '').replace(/-/g,"_"); }; // NEW isNum function: 01/09/2010// Thanks to Emile Grau, GigaTecnologies S.L., www.gigatransfer.com, www.mygigamail.comfunction isNum(s){// based on utility function isNum from xml2json plugin (http://www.fyneworks.com/ - diego@fyneworks.com)// few bugs corrected from original function :// - syntax error : regexp.test(string) instead of string.test(reg)// - regexp modified to accept comma as decimal mark (latin syntax : 25,24 )// - regexp modified to reject if no number before decimal mark : ".7" is not accepted// - string is "trimmed", allowing to accept space at the beginning and end of stringvar regexp=/^((-)?([0-9]+)(([\.\,]{0,1})([0-9]+))?$)/return (typeof s == "number") || regexp.test(String((s && typeof s == "string") ? jQuery.trim(s) : ''));};// OLD isNum function: (for reference only)//var isNum = function(s){ return (typeof s == "number") || String((s && typeof s == "string") ? s : '').test(/^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/); }; var myArr = function(o){ // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child//if(!o.length) o = [ o ]; o.length=o.length; if(!$.isArray(o)) o = [ o ]; o.length=o.length;// here is where you can attach additional functionality, such as searching and sorting... return o; }; // Utility functions End //### PARSER LIBRARY END // Convert plain text to xml if(typeof xml=='string') xml = $.text2xml(xml); // Quick fail if not xml (or if this is a node) if(!xml.nodeType) return; if(xml.nodeType == 3 || xml.nodeType == 4) return xml.nodeValue; // Find xml root node var root = (xml.nodeType == 9) ? xml.documentElement : xml; // Convert xml to json var out = parseXML(root, true /* simple */); // Clean-up memory xml = null; root = null; // Send output return out; }, // Convert text to XML DOM text2xml: function(str) { // NOTE: I'd like to use jQuery for this, but jQuery makes all tags uppercase //return $(xml)[0]; var out; try{ var xml = ((!$.support.opacity && !$.support.style))?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); xml.async = false; }catch(e){ throw new Error("XML Parser could not be instantiated") }; try{ if((!$.support.opacity && !$.support.style)) out = (xml.loadXML(str))?xml:false; else out = xml.parseFromString(str, "text/xml"); }catch(e){ throw new Error("Error parsing XML string") }; return out; } }); // extend $})(jQuery);
别人写的,需要用到jQuery库,用法$.xml2json()
0 0
- javascript xml字符串转为JSON对象
- javascript中由字符串转为json对象
- JSON字符串转为对象
- Javascript将字符串转为XML并读取对象值
- JS JSON对象转为字符串
- C# json字符串转为对象
- 后台对象转为json字符串
- iOS-json字符串转为对象
- 各种对象转为json字符串
- 将json字符串转为json对象
- 将XML Document 转为 Json 字符串输出
- 【JS】使用javascript将xml转为json
- javascript中json格式转为字符串
- JavaScript中Json变量转为字符串
- JackSon将一个对象转为Json字符串
- Json格式字符串转为对象源码
- js 将json字符串转为js对象
- java将对象转为json字符串
- 嵌入式LINUX环境下视频采集知识(V4L2)
- 使用setsockopt()来控制recv()与send()的超时,在阻塞时
- Linux - 非阻塞socket编程处理EAGAIN错误
- Mac使用技巧之Finder的个人收藏
- XDOJ1261 - 递推2
- javascript xml字符串转为JSON对象
- 解析oracle的rownum
- Python(2.7.x)文件操作的简单示例
- 大数
- ZOJ 3666 Alice and Bob 基础博弈
- 数学分割问题
- 【自考】数据库系统原理第一章
- 嵌入式软件的目录结构安排
- 关于傅里叶变换算法中的一个小算法(下标的问题)