RegEx 规范化 XML 语法

Posted

技术标签:

【中文标题】RegEx 规范化 XML 语法【英文标题】:RegEx to normalize XML syntax 【发布时间】:2016-02-27 23:44:44 【问题描述】:

我有一个 XML 代码,其中一些标签会生成 xml 解析错误(错误 #1090)。问题在于需要引用的属性:

<div class=treeview>

请帮我写一个正则表达式,使它们如下:

<div class="treeview">

【问题讨论】:

试试:String.replace(/treeview/, "\"treeview\"") 谢谢,但代码可能类似于&lt;div anyattr=anyvalue&gt; 甚至&lt;div anyattr=anyvalue anotherattr=diffvalue&gt;。所以这就是为什么我要求 RegEx 涵盖任何情况。其中唯一的静态内容是:tag-name 在“ 在寻求帮助之前,尝试做一些努力,尝试一些东西,写一些东西...... 【参考方案1】:

这个是正确的:

var pattern:RegExp = /(\w+)(=)(\w+)/g;

trace('regexTest:', pString.replace(pattern, '$1$2"$3"'));

因为,必须有3组:attribute_name、=(equals)、attribute_value

【讨论】:

这个工作正常。只是在第一组之前添加了空间【参考方案2】:

拜托,你能试试下一个代码吗:

var regExp:RegExp = /(class\=)(\w+)/g;
var sourceText:String = "<div class=treeview>";
var replacedText:String = sourceText.replace(regExp, '$1"$2"');
trace(replacedText);

简而言之,这个正则表达式的意思是:

    找到 2 个组:(class=) 和 (any-word-after-it) 在第 2 组引号前后添加。

【讨论】:

【参考方案3】:

你应该试试下面的正则表达式>

regex = /(<div[^>]*class=)(\S+)([^>]*>)/g;
sourceString.replace(regex, '$1"$2"$3');

【讨论】:

【参考方案4】:

尝试使用通用标记修复工具,例如 John Cowan 的 TagSoup。这可能比您自己尝试的任何方法都更加健壮(例如,大多数建议的正则表达式甚至不检查关键字=值结构是否在开始标记内)。

【讨论】:

感谢您的建议。是的,你是对的,它们中的大多数除了将一个关键字替换为另一个关键字外,其他语言的替换函数没有正则表达式。但是对于我这个有这个小问题的小应用来说已经足够了。

以上是关于RegEx 规范化 XML 语法的主要内容,如果未能解决你的问题,请参考以下文章

xml语法规范

XML的学习笔记————基本语法和规范

《信息安全技术 XML数字签名语法与处理规范》全文

yaml语法及规范

ant语法和规范

xml基本语法