diff --git a/SrcJySet.js b/SrcJySet.js index d7a2c284..929fe65f 100644 --- a/SrcJySet.js +++ b/SrcJySet.js @@ -1,108 +1,75 @@ //个人学习代码 function SRCSet() { let xmlhtml = request('http://f2dcj6.com/sapi?ac=videolist&pg=1&t=3'); - - function loadXml(str) { - if (str == null) { - return null; - } - var doc = str; - try{ - doc = createXMLDOM(); - doc.async = false; - doc.loadXML(str); - }catch(e){ - doc = $.parseXML(str); + + function getXmlDocumentByXmlString(xmlString) { + var xmlDoc = null; + if (window.DOMParser) { + var parser = new DOMParser(); + xmlDoc = parser.parseFromString(xmlString, "text/xml"); + } else { + //IE + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(xmlString); } - return doc; + return xmlDoc; } - //xml数据转成json对象的数据 - function xmlTojson(xmlObj, nodename, isarray){ - var obj = $(xmlObj); - var itemobj = {}; - var nodenames = ""; - var getAllAttrs = function(node){//递归解析xml 转换成json对象 - var _itemobj = {}; - var notNull = false; - var nodechilds = node.childNodes; - var childlenght = nodechilds.length; - var _attrs = node.attributes; - var firstnodeName = "#text"; - try{ - firstnodeName = nodechilds[0].nodeName; - }catch(e){ - } - if((childlenght > 0 && firstnodeName != "#text") || _attrs.length > 0){ - var _childs = nodechilds; - var _childslength = nodechilds.length; - var _fileName_ = ""; - if(undefined != _attrs){ - var _attrslength = _attrs.length; - for(var i = 0; i < _attrslength; i++){//解析xml节点属性 - var attrname = _attrs[i].nodeName; - var attrvalue = _attrs[i].nodeValue; - _itemobj[attrname] = attrvalue; - } + function convertToJSON(xmlDoc) { + //准备JSON字符串和缓存(提升性能) + var jsonStr = ""; + var buffer = new Array(); + + buffer.push("{"); + //获取xml文档的所有子节点 + var nodeList = xmlDoc.childNodes; + + generate(nodeList); + + /** + * 中间函数,用于递归解析xml文档对象,并附加到json字符串中 + * @param node_list xml文档的的nodeList + */ + function generate(node_list) { + + for (var i = 0; i < node_list.length; i++) { + var curr_node = node_list[i]; + //忽略子节点中的换行和空格 + if (curr_node.nodeType == 3) { + continue; } - for (var j = 0; j < _childslength; j++) {//解析xml子节点 - var _node = _childs[j]; - var _fildName = _node.nodeName; - if("#text" == _fildName){break;}; - if(_itemobj[_fildName] != undefined){//如果有重复的节点需要转为数组格式 - if(!(_itemobj[_fildName] instanceof Array)){ - var a = _itemobj[_fildName]; - _itemobj[_fildName] = [a];//如果该节点出现大于一个的情况 把第一个的值存放到数组中 - } - } - var _fildValue = getAllAttrs(_node); - try{ - _itemobj[_fildName].push(_fildValue); - }catch(e){ - _itemobj[_fildName] = _fildValue; - _itemobj["length"] = 1; + //如果子节点还包括子节点,则继续进行遍历 + if (curr_node.childNodes.length > 1) { + buffer.push("\"" + curr_node.nodeName + "\": {"); + generate(curr_node.childNodes); + } else { + var firstChild = curr_node.childNodes[0]; + + if (firstChild != null) { + //nodeValue不为null + buffer.push("\"" + curr_node.nodeName + "\":\"" + firstChild.nodeValue + "\""); + } else { + //nodeValue为null + buffer.push("\"" + curr_node.nodeName + "\":\"\""); } + } - }else{ - _itemobj = (node.textContent == undefined) ? node.text : node.textContent; - } - return _itemobj; - }; - - if(nodename){ - nodenames = nodename.split("/") - } - for(var i = 0;i < nodenames.length; i++){ - obj = obj.find(nodenames[i]); - } - $(obj).each(function(key, item){ - if(itemobj[item.nodeName] != undefined){ - if(!(itemobj[item.nodeName] instanceof Array)){ - var a = itemobj[item.nodeName]; - itemobj[item.nodeName] = [a]; - } - itemobj[item.nodeName].push(getAllAttrs(item)); - }else{ - if(nodenames.length > 0){ - itemobj[item.nodeName] = getAllAttrs(item); - }else{ - itemobj[item.firstChild.nodeName] = getAllAttrs(item.firstChild); + if (i < (node_list.length - 2)) { + buffer.push(","); + } else { + break; } } - }); - - if(nodenames.length > 1){ - itemobj = itemobj[nodenames[nodenames.length-1]]; + //添加末尾的"}" + buffer.push("}"); } - if(isarray && !(itemobj instanceof Array) && itemobj != undefined){ - itemobj = [itemobj]; - } - return itemobj; + + jsonStr = buffer.join(""); + return jsonStr; } - var xmlObj = loadXml(xmlhtml); - var jsonData = xmlTojson(xmlObj, 'userList/user', true); - log(jsonData) - + let xmljosn = convertToJSON(getXmlDocumentByXmlString(xmlhtml)); + log(xmljosn); addListener("onClose", $.toString(() => {