如何利用JavaScript将XML转换为JSON?
程序员文章站
2022-05-11 07:57:28
最近在开发项目时遇到了一个需求,从查询出来的xml报文的字符串需要解析处参数来,在页面上支持修改,所以催生了利用javascript来实现解析xml文本的功能。
具体思路是现获取...
最近在开发项目时遇到了一个需求,从查询出来的xml报文的字符串需要解析处参数来,在页面上支持修改,所以催生了利用javascript来实现解析xml文本的功能。
具体思路是现获取xml的dom对象,然后再通过遍历和递归获取子元素的nodevalue,来拼接出json字符串。
通过xml字符串来生成xml的dom对象:
/** * 通过传入xml的内容字符串来解析xml * @param xmlstring xml字符串 * @returns xml的document对象 */ 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 xmldoc; }
或者通过请求xml文件来获取xml的dom对象:
/** * 通过传入xml文件路径来解析xml文档 * @param xmlfilepath xml文档路径,如:files/test.xml * @returns xml的document对象 */ function getxmldocumentbyfilepath(xmlfilepath) { //xmldocument对象 var xmldoc = null; //xmlhttp对象 var xmlhttp = null; if (window.xmlhttprequest) { //ie7+, firefox, chrome, opera, safari xmlhttp = new xmlhttprequest(); } else { //ie6, ie5 xmlhttp = new activexobject("microsoft.xmlhttp"); } xmlhttp.open("get", xmlfilepath, false); xmlhttp.send(); xmldoc = xmlhttp.responsexml; return xmldoc; }
接下来就是重点的部分了,将xml转换成json字符串:
/** * 将xml的document对象转换为json字符串 * @param xmldoc xml的document对象 * @return string */ 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; } //如果子节点还包括子节点,则继续进行遍历 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 + "\":\"\""); } } if (i < (node_list.length - 2)) { buffer.push(","); } else { break; } } //添加末尾的"}" buffer.push("}"); } jsonstr = buffer.join(""); return jsonstr; }
使用方式:通过getxmldocumentbyfilepath(xmlfilepath)或者getxmldocumentbyxmlstring(xmlstring)获取xml的document对象,然后通过调用converttojson(xmldocument)传入xml的ducument对象即可得到转换后的json字符串。
适用范围:不含有attribute的任意xml文档。
当前只是第一版本的xml转json的工具,可能会有很多不足和需要改进的地方,欢迎大家一起交流。我会在github上更新最新的代码,项目地址:https://github.com/tsuixh/xml_json_converter_tool,欢迎大家提出问题!
上一篇: 如何拯救一个被百度降权的网站
下一篇: angularJs指令详解