-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
jrichards
committed
Jun 29, 2011
1 parent
ac46593
commit 3a5b992
Showing
11 changed files
with
160 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
/* | ||
### jQuery XML to JSON Plugin v1.0 - 2008-07-01 ### | ||
* http://www.fyneworks.com/ - diego@fyneworks.com | ||
* Dual licensed under the MIT and GPL licenses: | ||
* http://www.opensource.org/licenses/mit-license.php | ||
* http://www.gnu.org/licenses/gpl.html | ||
### | ||
Website: http://www.fyneworks.com/jquery/xml-to-json/ | ||
*//* | ||
# INSPIRED BY: http://www.terracoder.com/ | ||
AND: http://www.thomasfrank.se/xml_to_json.html | ||
AND: 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']); | ||
if(!obj[cnn].length) 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']); | ||
if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ]; | ||
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,"_"); }; | ||
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){ | ||
if(!o.length) 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 = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); | ||
xml.async = false; | ||
}catch(e){ throw new Error("XML Parser could not be instantiated") }; | ||
try{ | ||
if($.browser.msie) 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); |