<!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+?)(?:\n\s*?(.+?=".*?"))/g,'$1 $2')
}
function formatXml(text)
{
/*
* 功能:去掉多余的空格
*
* $0为正则表达式/(<\w+)(\s.*?>)/g匹配到的字符串
* name为正则表达式(<\w+)匹配到的字符串
* props为正则表达式(\s.*?>)匹配到的字符串
*/
text = '\n' + text.replace(/(<\w+)(\s.*?>)/g,function($0, name, props){
//alert('$0='+$0+', name='+name+', props='+props);
//alert(name + ' ' + props.replace(/\s+(\w+)/g," $1"));
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 = '<!--' + escape(text) + '-->';
//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 + '<!--' + text.replace(/^\s*/mg, prefix ) + '-->';
//alert(ret);
return ret;
});
return outputText.replace(/\s+$/g,'').replace(/\r/g,'\r\n');
}
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" style="width:100%;height:45%;">
<a id="test" name="nn" ><b>b</b><c>c</c></a>
</textarea>
<div style="margin:0px auto;"><input type="button" id="btnFormat" onclick="btnFormat_click()" value="格式化" style="width:50%;height:10%;"/></div>
<textarea id="output" style="width:100%;height:45%;"></textarea>
</body>
</html>
分享到:
相关推荐
每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。本书提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的...
每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。本书提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的...
本篇文章是对使用Javascript正则表达式来格式化XML内容的方法进行了详细的分析介绍,需要的朋友可以参考下
javascript 正则表达式格式化xml标签缩进。 可用于emeditor插件,或者学习正则表达式。
正则表达式解析器 ... 现在,您可以使用格式化程序将AST转换为多种格式(今天仅支持XML): $ formatter = new \ RegexParser \ Parser \ Formatter \ XMLFormatter (); $ xml = $ formatter -> format
第十二章:格式化XML(一) 第十三章:格式化XML(二) 第十四章:XML 的典型运用(一) 第十五章:XML 的运用(二) 第十六章:XML 的运用(三) 第十七章:如何使用XSL 和正则表达式来验证数据的有效性(一) 第十...
但是,有一种看起来更方便的老古董——正则表达式,处理json是绰绰有余。 Json(JavaScript Object Notation)作为当今互联网最为一种流行的,超越语言的网络数据交换格式,可以说是“肉多骨少”的一种类型,在网络...
格式化XML(一) 36 第十三章:格式化XML(二) 38 第十四章:XML的典型运用(一) 52 第十五章:XML的运用(二) 58 第十六章:XML的运用(三) 60 第十七章:如何使用XSL和正则表达式来验证数据的...
介绍XML的语法、XML DOM、格式化XML、XML的典型应用以及如何使用XSL和正则表达式来验证数据的有效性的好书。
正则表达式 输入/输出 联网 线程 配件 反射 定制属性信息 自动内存管理 同本机dll互操作 与com互操作 第四章 bcl综述 核心类型 文本 集合 流和输入输出 联网 线程 安全 反射 序列化 远程调用 ...
利用正则表达式解析下面的XML/HTML标签: <composer>Wolfgang Amadeus Mozart <author>Samuel Beckett <city>London</city> 希望自动格式化重写为: composer: Wolfgang Amadeus Mozart author: Samuel Beckett ...
目录 网盘文件永久链接 01网络自动化概述mp4 02软件版本控制理论mp4 ...33正则表达式mp4 34基于 Python的网络数据包制作实验mp4 35基于 Python的运维告警邮件发送mp4 36NCE业务开放编程理论mp4 37网络人工智能简介mp4
10.7 用正则表达式处理文本 10.7.1 创建一个计价公式编辑器 10.7.1.1 需求分析--什么是计价公式编辑器 10.7.1.2 系统实现--计价公式编辑器的实现 10.7.2 创建一个同步滚动歌词播放器 10.7.2.1...
06、utilcode - 包含被运行时、工具和 C# 编译器使用的核心例程,例如路径处理和分析、数组和散列表管理、C 运行库、字符大小写支持、库和配件载入、调试和日志支持、同步机制,还包括字符串格式化、GUID创建、错误...
Araxis Merge2018是一款专业的可视化文件比较以及合并和同步的软件,新版带来了全新的功能以及优化,包括合并使您能够比较和处理不同版本的文本文件,如程序源代码,XML和HTML文件。合并可以从Microsoft Office,...