2014-09-10 44 views
1

我收到来自客户端的XML字符串类似下面的格式...如何使用ColdFusion从XML字符串中删除所有多余的空格?

<root> 
    <result success="1"/> 
    <userID>12345</userID> 
    <classID>56543</classID> 
</root> 

我需要这个字符串压缩成以下...

<root><result success="1"/><userID>12345</userID><classID>56543</classID></root> 

因此,所有的除了标签内部以外,空格被删除(所以空格在“结果”和“成功”之间仍然存在)。

我已经使用replace语句删除换行符,回车等,但我不能删除空格,而忽略标签内的空间。有没有办法使用正则表达式或其他方法来实现这一点?

回答

4

以下至REGx将匹配哪些不是在标签内的空间,

[\s]+(?![^><]*>) 

OR

[\s]+(?![^><]*(?:>|<\/)) 

只是一个空字符串替换匹配的空间。

DEMO

编辑从这里开始

从评论 - ColdFusion中的它的工作原理是这样的背景下...

strClean = REReplace(strOriginal,"[\s]+(?![^><]*(?:>|<\/))","","All"); 
+0

工作就像一个魅力。谢谢! – unclesol 2014-09-10 17:51:17

+0

如果任何人有兴趣,在ColdFusion的情况下,它的工作原理是这样的... strClean = REReplace(strOriginal,“[\ s] +(?![^><]*(?:> | <\ /))”,“”, “所有”); – unclesol 2014-09-10 17:51:56

+0

我在JavaScript中测试了这些正则表达式,它们不能正常工作。 '[\ s] +(?![^><]*>)'切割不应该的空格(来自文本内部)。另一方面''\ s] +(?![^><]*(?:> | <\ /))'错过一些空格。 – 2018-02-22 12:20:42

0

如何简单的正则表达式:>\s+?<和替换与><。作为接受答案的奖励,这将保留叶/终端元素中的空白。

0

最简单,工作溶液我看到的是,以取代近角括号的外侧的所有空格:

  • >\s+>通过,并
  • \s+<通过<

在ColdFusion的,应该是这样的:

str = REReplace(str, ">\s+", ">", "All"); 
str = REReplace(str, "\s+<", "<", "All"); 
相关问题