只在xml文件中删除标记之间的空格的正则表达式是什么?

时间:2012-05-11 10:02:00

标签: java xml regex

我的情况是我有一个用空格填充的xml文件。

<test>  <level>    <sub name="xyz">test</sub>   </level>  <test>

我需要删除空格,但不要删除带有元素属性名称的空格,因为这会使我的标记为<subname>。我可以递归查找空格,直到找到<并删除它们,如果找到>,则不删除它。我想知道是否可以通过Java中的正则表达式来实现这一点。

2 个答案:

答案 0 :(得分:6)

不要在没有XML解析器的情况下尝试处理XML。

通过一个简单的XSLT转换:

<xsl:stylesheet ...>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/"><xsl:copy-of select="."/></xsl:template>
</xsl:stylesheet>

答案 1 :(得分:2)

如果真的那么简单,这应该足够了:

my $xml_string = '<test>  <level>    <sub name="xyz">test</sub>   </level>  </test>';

# remove all whitespace before '<' symbol
$xml_string =~ s/\s+</</g;

print $xml_string; 
# echoes <test><level><sub name="xyz">test</sub></level></test>

我使用过Perl语法,但我想将它转换成你想要的任何语言都很容易。

但请注意,有几点需要注意(在这种情况下一如既往)。

例如,您不会在XML元素中遇到<符号 - 但它可以很好地存在于PCDATA部分中,并且正则表达式忽略了这种细微差别。

更新:使用“预见”功能可以使正则表达式更加简洁:

$xml_string =~ s/\s+(?=<)//g; # remove the sequence of whitespace, if followed by '<' 

...但并非所有语言都支持(Perl确实如此)。