js格式化xml

js格式化xml//格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好String.prototype.removeLineEnd=function(){returnthis.replace(/(<.+?\s+?)(?:\n\s*?(.+?=”.*?”))/g,’$1$2′)}functionformatXml(text){//去掉多余的空格…

 //格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好
 String.prototype.removeLineEnd = function() {
     return this.replace(/(<.+?\s+?)(?:\n\s*?(.+?=".*?"))/g, '$1 $2')
 }

 function formatXml(text) {
     //去掉多余的空格
     text = '\n' + text.replace(/(<\w+)(\s.*?>)/g, function($0, name, props) {
         return name + ' ' + props.replace(/\s+(\w+=)/g, " $1");
     }).replace(/>\s*?</g, ">\n<");

     //把注释编码
     text = text.replace(/\n/g, '\r').replace(/<!--(.+?)-->/g, function($0, text) {
         var ret = '<!--' + escape(text) + '-->';
         //alert(ret);
         return ret;
     }).replace(/\r/g, '\n');

     //调整格式
     var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/mg;
     var nodeStack = [];
     var output = text.replace(rgx, function($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) {
         var isClosed = (isCloseFull1 == '/') || (isCloseFull2 == '/') || (isFull1 == '/') || (isFull2 == '/');
         //alert([all,isClosed].join('='));
         var prefix = '';
         if (isBegin == '!') {
             prefix = getPrefix(nodeStack.length);
         } else {
             if (isBegin != '/') {
                 prefix = getPrefix(nodeStack.length);
                 if (!isClosed) {
                     nodeStack.push(name);
                 }
             } else {
                 nodeStack.pop();
                 prefix = getPrefix(nodeStack.length);
             }

         }
         var ret = '\n' + prefix + all;
         return ret;
     });

     var prefixSpace = -1;
     var outputText = output.substring(1);
     //alert(outputText);

     //把注释还原并解码,调格式
     outputText = outputText.replace(/\n/g, '\r').replace(/(\s*)<!--(.+?)-->/g, function($0, prefix, text) {
         //alert(['[',prefix,']=',prefix.length].join(''));
         if (prefix.charAt(0) == '\r')
             prefix = prefix.substring(1);
         text = unescape(text).replace(/\r/g, '\n');
         var ret = '\n' + prefix + '<!--' + text.replace(/^\s*/mg, prefix) + '-->';
         //alert(ret);
         return ret;
     });

     return outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n');
 }

 function getPrefix(prefixIndex) {
     var span = '    ';
     var output = [];
     for (var i = 0; i < prefixIndex; ++i) {
         output.push(span);
     }

     return output.join('');
 }

 //引用示例部分
 //(1)创建xml格式或者从后台拿到对应的xml格式
 var originalXml = '<?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Dont forget me this weekend!</body> </note>';
 //(2)调用formatXml函数,将xml格式进行格式化
 var resultXml = formatXml(originalXml);
 //(3)将格式化好后的formatXml写入页面中
 document.getElementById("paperContent").innerHTML = '<pre>' + resultXml + '<pre/>';

今天的文章js格式化xml分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7521.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注