美文网首页web前端
xml string 添加缩进和换行符

xml string 添加缩进和换行符

作者: 并入高黄 | 来源:发表于2020-04-14 18:27 被阅读0次
    function parse_xml (xmlStr) {
      text = xmlStr;
      //使用replace去空格
      text = "
    " + text.replace(/(<w+)(s.*?>)/g,function($0, name, props){
          return name + " " + props.replace(/s+(w+=)/g," $1");
      }).replace(/>s*?</g,">
    <");
      //处理注释
      text = text.replace(/
    /g,"
    ").replace(/<!--(.+?)-->/g,function($0, text){
          var ret = "<!--" + escape(text) + "-->";
          return ret;
      }).replace(/
    /g,"
    ");
      //调整格式  以压栈方式递归调整缩进
      var rgx = /
    (<(([^?]).+?)(?: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 == "/");
          var prefix = "";
          if(isBegin == "!"){//!开头
              prefix = setPrefix(nodeStack.length);
          }else {
              if(isBegin != "/"){///开头
                  prefix = setPrefix(nodeStack.length);
                  if(!isClosed){//非关闭标签
                      nodeStack.push(name);
                  }
              }else{
                  nodeStack.pop();//弹栈
                  prefix = setPrefix(nodeStack.length);
              }
          }
          var ret =  "
    " + prefix + all;
          return ret;
      });
      var prefixSpace = -1;
      var outputText = output.substring(1);
      //还原注释内容
      outputText = outputText.replace(/
    /g,"
    ").replace(/(s*)<!--(.+?)-->/g,function($0, prefix,  text){
          if(prefix.charAt(0) == "
    ")
              prefix = prefix.substring(1);
          text = unescape(text).replace(/
    /g,"
    ");
          var ret = "
    " + prefix + "<!--" + text.replace(/^s*/mg, prefix ) + "-->";
          return ret;
      });
      outputText= outputText.replace(/s+$/g,"").replace(/
    /g,"
    ");
      return outputText;    
    }
    
    
    function setPrefix(prefixIndex) {
      var result = "";
      var span = "    ";//缩进长度
      var output = [];
      for(var i = 0 ; i < prefixIndex; ++i){
          output.push(span);
      }
      result = output.join("");
      return result;
    }
    

    相关文章

      网友评论

        本文标题:xml string 添加缩进和换行符

        本文链接:https://www.haomeiwen.com/subject/hkztvhtx.html