JavaScript怎么解析XML文件并解析成JSON格式

原创 野人  2022-01-18 22:14  阅读 120 次

估计这篇文章应该是关于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;
  }
}

本文地址:https://www.yerenwz.com/5594.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论