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 相关文章推荐
10款非常有用的 Ajax 插件分享
Mar 14 Javascript
jQuery的slideToggle方法实例
May 07 Javascript
非html5实现js版弹球游戏示例代码
Sep 22 Javascript
JavaScript不刷新实现浏览器的前进后退功能
Nov 05 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
Aug 01 Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 Javascript
基于Vue实例生命周期(全面解析)
Aug 16 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
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下保存远程图片到本地的办法
2010/08/08 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
改版了网上的一个js操作userdata
2007/04/27 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python count函数使用方法实例解析
2020/03/23 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
服装店营销方案
2014/03/10 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
大气污染防治方案
2014/05/19 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js