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 添加缩进和换行符
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 错误格式 一般心态不好的校对,看到萌新这种错误简直吐血,基本让他退回重做 从结果来倒推,这时候可试试批量替换,修改...
- 介绍 换行符/n本意是从光标处跳到下一行,注意不一定是跳到下一行的开头 回车符/r本意是从光标处跳到所在行的开头,...