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在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
JavaScript全局函数使用简单说明
Mar 11 Javascript
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
JS动态创建DOM元素的方法
Jun 09 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
PostgreSQL Node.js实现函数计算方法示例
Feb 12 Javascript
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
openLayer4实现动态改变标注图标
Aug 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
php字符串分割函数explode的实例代码
2013/02/07 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
js实现继承的5种方式
2015/12/01 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
初步剖析C语言编程中的结构体
2016/01/16 Python
解读python如何实现决策树算法
2018/10/11 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
python中实现栈的三种方法
2020/12/19 Python
ASP.NET Core中的配置详解
2021/02/05 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
物流司机岗位职责
2013/12/28 职场文书
期末自我鉴定
2014/02/02 职场文书
慰问信格式
2015/02/14 职场文书
创业计划书之美甲店
2019/09/20 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python