Javascript格式化并高亮xml字符串的方法及注意事项


Posted in Javascript onAugust 13, 2018

两个关键点

1.使用DOMParser解析xml
2.递归遍历xml树,按格式输出每一个节点

关于使用DOMParser

此方法目前在IE9以上和其它浏览器里都是支持的,所以这里不在写关于IE9以下不支持的情况, 具体的使用请跳转

https://developer.mozilla.org/en-US/docs/Web/API/DOMParser

Javascript代码

/**
 * 格式化xml
 * @param content
 * @returns {*}
 */
this.parse_xml = function(content) {
  let xml_doc = null;
  try {
    xml_doc = (new DOMParser()).parseFromString(content.replace(/[\n\r]/g, ""), 'text/xml');
  } catch (e) {
    return false;
  }

  function build_xml(index, list, element) {
    let t = [];
    for (let i = 0; i < index; i++) {
      t.push('    ');
    }
    t = t.join("");
    list.push(t + '<<span class="code-key">'+ element.nodeName +'</span>>\n');
    for (let i = 0; i < element.childNodes.length; i++) {
      let nodeName = element.childNodes[i].nodeName;
      if (element.childNodes[i].childNodes.length === 1) {
        let value = element.childNodes[i].childNodes[0].nodeValue;
        let value_color = !isNaN(Number(value)) ? 'code-number' : 'code-string';
        let value_txt = '<span class="'+ value_color +'">' + value + '</span>';
        let item = t + '    <<span class="code-key">' + nodeName +
          '</span>>' + value_txt + '</<span class="code-key">' + nodeName + '</span>>\n';
        list.push(item);
      } else {
        build_xml(++index, list, element.childNodes[i]);
      }
    }
    list.push(t + '</<span class="code-key">'+ element.nodeName +'</span>>\n');
  }
  let list = [];
  build_xml(0, list, xml_doc.documentElement);
  return list.join("");
};

css

.code-string{color:#993300;}
.code-number{color:#cc00cc;}
.code-boolean{color:#000033;}
.code-null{color:magenta;}
.code-key{color:#003377;font-weight:bold;}

效果

Javascript格式化并高亮xml字符串的方法及注意事项

注意

DOMParser在解析xml时,如果xml字符串里有些特殊的字符,解出来的树节点有些是不需要的,会倒置遍历节点失败。

总结

以上所述是小编给大家介绍的Javascript格式化并高亮xml字符串,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
IE8 原生JSON支持
Apr 13 Javascript
为你的网站增加亮点的9款jQuery插件推荐
May 03 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
c#程序员对TypeScript的认识过程
Jun 19 Javascript
JavaScript常用基础知识强化学习
Dec 09 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
May 26 Javascript
JS比较两个数值的大小实例
Nov 25 Javascript
12 款 JS 代码测试必备工具(翻译)
Dec 13 Javascript
Vue结合后台导入导出Excel问题详解
Feb 19 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
Layui事件监听的实现(表单和数据表格)
Oct 17 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
vue实现文件上传功能
Aug 13 #Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 #Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 #Javascript
使用JavaScript实现node.js中的path.join方法
Aug 12 #Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 #Javascript
Vue实现左右菜单联动实现代码
Aug 12 #Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 #Javascript
You might like
PHP面向对象分析设计的经验原则
2008/09/20 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python将字符串转换成数组的方法
2015/04/29 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python将字母转化为数字实例方法
2019/10/04 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
什么是makefile? 如何编写makefile?
2012/08/08 面试题
往来会计岗位职责
2013/12/19 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
趵突泉导游词
2015/02/03 职场文书
八年级历史教学反思
2016/02/19 职场文书
Python道路车道线检测的实现
2021/06/27 Python
Python办公自动化PPT批量转换操作
2021/09/15 Python
MySQL Server层四个日志的实现
2022/03/31 MySQL
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python