估计这篇文章应该是关于zba(ZBlog插件特有的格式)文件解析的小工具的最后一篇文章了,因为我已经把在写zba(ZBlog插件特有的格式)文件解析的小工具遇到的所有问题都一一记录下来,所以如果你有看过的我之前的文章的话,其实自己写关于zba(ZBlog插件特有的格式)文件解析的小工具也是不难的。
本来这篇文章应该是很早就要去写了,因为那时候我已经把写好的插件()上传到了ZBlog的应用中心,但是因为一些原因,详情请看《巧用a标签的download属性实现无需解码base64即可下载》,导致审核不通过,心情不好久没有及时发布了,也只好在自己本站发布了,顺带就把名字中的【插件】改成小工具喽。
在到这,我才发现还没进入正题,那在扯淡一会儿吧,大家估计也发现了吧,我这人啊,总喜欢在技术文章的中,穿插些无关本文话题的关系不大的内容,这可能就是我的文章style吧。
其实我也不懂为什么会这样写,可能写习惯了?但是也没有人教我这样写啊,估计自创了一个体系吧,但是我喜欢这样写啊,开头交代清楚,我才知道为什么我要写这篇文章?为什么这篇文章能嗯拖这么久?
好了,废话bb完了,进入到正题了。
在JavaScript中解析XML文件,其实还是依赖是JavaScript本身就提供好给我们的API,我们需要调用下这个API方法就可以了。
步骤一、应该是读取XML文件,然后转换成字符串,这步其实大部分人都知道,毕竟只有文件读取出来,才知道里面的内容,关键的是后面的几步。
步骤二、接下来的,这个方法是把XML字符串转换成对应的XML DOM对象,具体代码如下:
/** * xml字符串转换XML DOM对象 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser * @param {string} xmlStr * @returns boolean Document */ function xmlStr2XmlDom(xmlStr) { const parser = new DOMParser(); const xmlDom = parser.parseFromString(xmlStr, "application/xml"); const errorNode = xmlDom.querySelector("parsererror"); if (errorNode) { return false; } else { return xmlDom; } }
上面涉及到一个知识点《MIME类型中的text/xml与application/xml有什么区别?》
步骤三/strong>、将XML DOM对象转换成JSON格式,这样才方便我们处理数据,也是我们比较常见的数据格式。
/** * XML DOM对象转换成JSON格式 https://www.cnblogs.com/xyyt/p/13037732.html * @param {Document | Element} xmlDom * @returns object */ function xmlDom2JSON(xmlDom) { let xmlDomArr = Array.from(xmlDom.children); if (xmlDomArr.length > 0) { let obj = {}; xmlDomArr.forEach((node) => { const nodeName = node.nodeName; if (typeof obj[nodeName] === "undefined") { obj[nodeName] = xmlDom2JSON(node); } else { obj[nodeName] = [ ...(Object.prototype.toString.call(obj[nodeName]) === "[object Array]" ? obj[nodeName] : [obj[nodeName]]), xmlDom2JSON(node), ]; } }); return obj; } else { return xmlDom.textContent; } }