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 相关文章推荐
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
JavaScript实现图片轮播特效
Oct 23 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 17 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
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP中overload与override的区别
2017/02/13 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
简单了解Python生成器是什么
2019/07/02 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
python属于跨平台语言码
2020/06/09 Python
python的flask框架难学吗
2020/07/31 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
音乐教学反思
2014/02/02 职场文书
户籍证明格式
2014/09/15 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
军训决心书范文
2015/09/22 职场文书
责任书格式
2019/04/18 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js