基于递归算法的XML文本格式的判断(javascript实现)

来源:互联网 发布:淘宝网内部优惠券 编辑:程序博客网 时间:2024/06/05 15:07

 定义5个xml字符串:

  var str1=" <a>  <b>b</b> <c>c</c>  </a> "
  var str2=" <a  >  <b>b</b> <c>c</c>  </a> "
  var str3=" <a>  <b>b</b> <c>c</c>  "
  var str4=" <a>  <b  >b</b> <c>c</c>  </a> "
  var str5=" <a>  b</b> <c>c</c>  </a> "
在isXml函数中测试

  isXml(str1);     //无输出
  isXml(str2);     //<>中有空格
  isXml(str3);     //<>元素不成对
  isXml(str4);     //<>中有空格
  isXml(str5);     //<>元素不成对

结果如下图:


源码如下:

<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>XML格式判断</title>
</head>
<body>
  <script type="text/javascript">
  var str1=" <a>  <b>b</b> <c>c</c>  </a> "
  var str2=" <a >  <b>b</b> <c>c</c>  </a> "
  var str3=" <a>  <b>b</b> <c>c</c>  "
  var str4=" <a>  <b >b</b> <c>c</c>  </a> "
  var str5=" <a>  b</b> <c>c</c>  </a> "


  isXml(str1);     //无输出
  isXml(str2);     //<>中有空格
  isXml(str3);     //<>元素不成对
  isXml(str4);     //<>中有空格
  isXml(str5);     //<>元素不成对


  function isXml(str){
    if(str.indexOf("<")==-1) return;
    var n1=str.indexOf("<");
    var n2=str.indexOf(">",n1);
    var sub_str=str.substring(n1+1,n2);
    if(!isBlank(sub_str)) return;
    if(!isPair(str,sub_str)) return;
    var n3=str.indexOf("</"+sub_str+">");
    var sub_str_str=str.substring(n2+1,n3);
    isXmlXml(sub_str_str);
  }



   function isBlank(str){
    for(var i=0;i<str.length;i++){
      if(str.charAt(i)==" "){
        console.log("<>中有空格");
        return false;
      }
    }
    return true;
   }
   function isPair(str,sub_str){
    if(str.indexOf("</"+sub_str+">")==-1){
      console.log("元素不成对");
      return false;
    }
      return true;
   }


   function isXmlXml(str){
      if(str.indexOf("<")==-1) return;
      var n1=str.indexOf("<");
      var n2=str.indexOf(">",n1);
      var sub_str=str.substring(n1+1,n2);
      if(!isBlank(sub_str)) return;
      if(!isPair(str,sub_str)) return;
      var n3=str.indexOf("</"+sub_str+">");
      var n4=str.indexOf(">",n3);
      var sub_str1=str.substring(n1,n4+1);
      isXml(sub_str1);     //递归检验
      var sub_str2=str.substring(n4+1);
      isXmlXml(sub_str2);   //递归检验其余的部分
   }


  </script>
</body>
</html>


0 0
原创粉丝点击