如何使用ColdFusion从XML字符串中删除所有多余的空格?

时间:2014-09-10 17:21:02

标签: regex coldfusion

我从客户端收到一个XML字符串,格式如下......

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

我需要将此字符串压缩为以下内容...

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

因此,除了标签内部之外,所有的空格都被移除(因此空间仍然存在于&#34;结果&#34;和&#34;成功&#34;)。

我使用replace语句来删除换行符,回车符等,但是我无法删除空格而忽略了标记内的空格。有没有办法使用正则表达式或其他方法来实现这一目标?

4 个答案:

答案 0 :(得分:4)

以下regx将匹配不在标签内的空格

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

OR

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

只需用空字符串替换匹配的空格。

DEMO

编辑从这里开始

从评论中 - 在ColdFusion的背景下,它就像这样......

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我看到的最简单,最有效的解决方案是替换尖括号外侧附近的所有空格:

    {li> >\s+ >和 {li> \s+< <

在ColdFusion中它应该是这样的:

str = REReplace(str, ">\s+", ">", "All");
str = REReplace(str, "\s+<", "<", "All");

答案 3 :(得分:0)

我没有看到使用任何正则表达式方法想要的确切结果,并且我有直觉认为用正则表达式处理XML并不是很常见。对于XML,我喜欢停留在XML领域,您可以使用XmlTransform完成所需的操作。

使用此XSL

<xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes"/>

  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
   <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

您可以简单地执行以下操作:

xmlOut = XmlTransform(xmlIn, stripSpaceXSL);

请参阅演示:https://trycf.com/gist/d6be6b6b8e04ccea3dbd9ece9c60fa2c/lucee5?theme=monokai