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 相关文章推荐
HTTP状态代码以及定义(解释)
Feb 02 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
js控制frameSet示例
Sep 10 Javascript
jquery实现弹出层效果实例
May 19 Javascript
利用JS实现数字增长
Jul 28 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 Javascript
对类Vue的MVVM前端库的实现代码
Sep 07 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
Vue实现移动端拖拽交换位置
Jul 29 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 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
oracle资料库函式库
2006/10/09 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
window.location.hash 属性使用说明
2010/03/20 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
使用python分析git log日志示例
2014/02/27 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python批量处理文件或文件夹
2020/07/28 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
师范生实习自我鉴定
2013/11/01 职场文书
资产经营总监岗位职责
2013/12/04 职场文书
暑期实践思想汇报
2014/01/06 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
英语邀请函范文
2015/02/02 职场文书
地震捐款简报
2015/07/21 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2016春季运动会开幕词
2016/03/04 职场文书