如何使用Javascript正则表达式来格式化XML内容
如何使用Javascript正则表达式来格式化XML内容
发布时间:2016-12-30 来源:查字典编辑
摘要:使用得是Emeditor,在看XML文档时,总是因为格式混乱而看不清。这个是一个Emeditor宏来自动格式化XML。下载:formatXm...

使用得是Emeditor ,在看XML文档时,总是因为格式混乱而看不清。这个是一个Emeditor宏来自动格式化XML。下载:formatXml.rar (1,021.00 bytes)

下面这段是这个网页版的javascript格式化XML的代码。

复制代码 代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

<meta http-equiv=content-type content="text/html; charset=UTF-8">

<title>Xml格式化工具</title>

<script type="text/javascript">

String.prototype.removeLineEnd = function()

{

return this.replace(/(<.+?s+?)(?:ns*?(.+?=".*?"))/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 = '<>';

//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 + '<>';

//alert(ret);

return ret;

});

return outputText.replace(/s+$/g,'').replace(/r/g,'rn');

}

function getPrefix(prefixIndex)

{

var span = ' ';

var output = [];

for(var i = 0 ; i < prefixIndex; ++i)

{

output.push(span);

}

return output.join('');

}

function btnFormat_click()

{

var $ = document.getElementById;

$('output').value = formatXml($('input').value);

}

</script>

</head>

<body>

<textarea id="input"></textarea>

<div><input type="button" id="btnFormat" value="格式化"/></div>

<textarea id="output"></textarea>

</body>

</html>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类