定义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>