`

用正则表达式格式化xml代码

    博客分类:
  • 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+?)(?:\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>
分享到:
评论

相关推荐

    正则表达式+xml

    正则表达式(Regular Expression)和XML(eXtensible Markup Language)是IT领域中两种重要的技术。...在实际开发中,了解并熟练掌握正则表达式和XML的使用,能帮助我们更好地处理文本数据和结构化信息。

    servlet 正则表达式

    在Servlet中,我们通常使用正则表达式来验证用户输入,确保它们符合特定格式。例如,验证邮箱地址: ```java String email = request.getParameter("email"); if (email.matches("\\b[A-Za-z0-9._%+-]+@[A-Za-z...

    正则表达式经典实例

    2. **多语言支持**:书中详细阐述了如何在不同的编程语言和脚本语言中有效使用正则表达式,帮助读者理解不同语言之间正则表达式的API、语法和行为差异。 3. **实际应用案例**:提供了上百个实用的实例,涵盖文本...

    xml需求文档及正则表达式介绍

    总的来说,XML和正则表达式是IT领域的基础工具,掌握它们能帮助我们更好地处理和分析结构化数据。在实际项目中,理解XML的结构和编写清晰的需求文档至关重要,而熟练运用正则表达式可以提升数据处理的效率和精度。...

    正则表达式计数代码行数

    在编程领域,它被广泛应用于各种任务,包括数据提取、验证输入、格式化输出以及本例中的代码行计数。本教程将详细介绍如何使用正则表达式来计算代码中的普通代码行数、注释行数和空白行数。 首先,我们要理解代码行...

    JS的正则表达式进行验证

    虽然这段代码未直接使用正则表达式进行日期格式验证,但结合正则表达式的应用,我们可以创建更全面的日期验证逻辑。 一个简单的日期格式验证正则表达式可以是:`/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|...

    正则表达式匹配小工具源码

    XML文件作为数据存储格式,便于数据的结构化和跨平台使用。 3. **Properties\Resources.Designer.cs**:这是程序资源的管理类,包含了应用程序中使用的图标、字符串等资源的定义。 4. **XmlHelper.cs**:实现了XML...

    正则表达式趣味例子集合

    - 在代码中,它们可以用于输入验证、数据清洗和格式化。 6. **正则表达式的性能与优化** - 长度优先原则:正则引擎通常优先尝试最短的匹配方式,可能导致回溯,影响性能。 - 避免贪婪匹配:默认情况下,量词是...

    用于检验正则表达式正确性的测试软件

    XML格式的数据文件便于结构化存储和检索这些模式,对于初学者来说尤其有用,因为他们可以从已知的模式中学习并构建自己的正则表达式。 使用正则表达式测试工具时,关键知识点包括: 1. **正则语法**:了解基本的元...

    正则表达式匹配regex.rar

    在"正则表达式匹配regex.rar"这个压缩包中,包含了以下几个关键文件,它们是理解和使用正则表达式的重要组成部分: 1. **XControl.dll**:这是一个动态链接库文件,可能包含了实现正则表达式匹配功能的函数和类。在...

    正则表达式+XML指南

    正则表达式与XML是两种在信息技术领域广泛应用的语言和格式,它们各自有着独特的用途和功能。正则表达式,简称正则,是一种强大的文本处理工具,用于匹配、查找、替换和提取字符串模式。XML(eXtensible Markup ...

    XML正则表达式转换工具

    XML(可扩展标记语言)是一种用于存储和传输数据的结构化格式,广泛应用于Web服务、配置文件和数据交换。在处理XML文档时,有时我们可能需要使用正则表达式来匹配或提取特定的数据。正则表达式是模式匹配的强大工具...

    动态加载正则表达式验证输入内容

    在本例中,我们探讨的是如何使用C#语言动态加载配置文件(config文件)来获取正则表达式,然后用这些表达式来验证用户输入的内容是否符合预设的规范。下面我们将深入讨论这个过程中的关键知识点。 1. **配置文件...

    正则表达式新闻抓取程序

    【正则表达式新闻抓取程序】是一种利用特定的规则(正则表达式)来从网页中筛选并提取新闻信息的软件工具。该程序的主要功能是根据用户设定的抓取源,即目标网站URL,以及定义好的标题正则表达式,自动地在网络上...

    XML正则表达式工具

    XML(eXtensible Markup ...掌握XML正则表达式工具的使用,不仅可以提升数据处理能力,还能在处理XML数据时减少错误,提高工作效率。对于经常处理XML数据的IT从业者来说,熟练运用这类工具是提升专业技能的重要途径。

    正则表达式测试工具

    XML是一种结构化数据格式,用于存储和传输数据。在这个上下文中,它可能包含了用户可以加载和使用的正则表达式库,方便进行测试和比较。 在使用正则表达式测试工具时,用户可以输入待匹配的文本和正则表达式,然后...

    最新CSS + DIV+正则表达式

    在前端开发中,正则表达式常用于验证表单输入、提取URL、格式化数据等场景。 1. **基本语法**:包括字符集(如\d表示数字,\w表示字母或数字),量词(*、+、?表示重复次数),以及锚点(^表示开头,$表示结尾)等...

    采集正则表达式

    在采集过程中,正则表达式常用于解析HTML或XML等网页源代码,提取出目标数据,如新闻标题、内容、时间等。 以新浪网为例,新浪是国内知名的新闻资讯平台,其包含新浪财经、新浪国际、新浪国内、新浪社会等多个频道...

Global site tag (gtag.js) - Google Analytics